Share good ideas and conversation.   Login, Join Us, or Take a Tour!
comment by BT
BT  ·  2212 days ago  ·  link  ·    ·  parent  ·  post: First question: Which language should I learn first?

For a website you'll need to have a good grasp of the frontend languages - HTML, javascript, and css - in addition to the chosen backend language. Modern and responsive sites are moving towards more and more client-side code; you might find yourself writing more javascript than backend code even. I would recommend, once you get to writing the frontend, that you try to start out using existing frameworks such as backbone.js, ember.js, or another which catches your fancy because they'll somewhat encourage good structrue/style.

I also don't recommend jumping into that mess to begin with because there's so many different pieces that you have to at least have a decent grasp on. Learning programming before beginning will make it a lot more manageable.

For the backend you'll find the "easiest" options are php, nodejs, python (with flask/django), or ruby (on rails). Nodejs will have the benefit that you can write javascript frontend and backend.

I'd recommend learning one of the above languages (ignoring the framework in parenthesis if applicable until after you have a grasp on the core language) first. Pick up a book for it. I won't recommend one for php because it's going out of style and, though still widely used, is probably the worst choice of those listed above. Nodejs is still relatively new and I don't have any particular recommendations because I haven't read any of sparse selection of books for it. For ruby, the Pragmatic Programmer's Guide is fairly good. Learn python the hard way is quite good, especially considering that it's free.

If you'd like to be in programming for the long term or have a better understanding of how things really work (which will, if not in obvious ways, translate to better code in subtle ways) then I'd recommend learning C before anything else with K&R. Even though C's an old language, spending time with it gives you a grasp of how things, including other languages, actually work. It introduces the basic syntax and core concepts of all the other languages I mentioned as well (excluding css/html which barely count as languages).

Sorry, that was rather long winded. The tl;dr is "Learn the backend language first, or C if you want to be a 'real programmer'. Learn the frontend stuff later on and, ideally, sort of as you go". All my own opinion etc etc of course.




Astral  ·  2211 days ago  ·  link  ·  

As far as using back end languages MySQL or a similar service would be required for implementing it online would be required, correct? Or would implementing (in my case python) require something else?

BT  ·  2211 days ago  ·  link  ·  

  Note: My links all got parenthesis appended to them. "[test](test) test" becomes "[test](test))test" after saving and will not change back. Inserting an extra space lets the space show up, but the extra parenthesis also persists. 
mk See the above note. #bugskii . Perhaps I'm doing it wrong. Do let me know if so.

Yes and no. You'll almost certainly need some sort of database backend (non-relational databases are getting pretty popular nowadays). The thing is, you won't actually need to know the query language anymore in many cases.

In the case of relational databases (typically mysql/postgres) many languages provide some sort of database abstraction which greatly reduces the amount of database-specific knowledge you need to know. Let's take an example from ruby on rails: The query

  SELECT * FROM clients WHERE locked=true
becomes simply

  Client.where(:locked => true)
. The second, using ORM, hides the query language behind the language's objects. It means the programmer only has to, for simple stuff, know the language and library's syntax. Admittedly, more complex stuff almost necessitates knowledge of the underlying database, but those cases won't come up in all that many situations.

As for the new "hip" relational-database replacements, they almost invariably have similarly abstracted libraries. The many key-value stores, such as redis, basically just have set/get methods. Document-stores are more complicated to try and classify, but the libraries do simplify things significantly.

The point I'm trying to get across here, if a little slowly, is that higher level languages have abstracted databases to the point that a fine grasp of the underlying query language is unneeded; rudimentary knowledge will be enough for the OP's purposes.

Okay, final bit. You mention python, but you don't mention what you're doing other than "online". Online stuff doesn't have to have a database necessarily. Sites that can be static (information, no users. Blogs can also be static) shouldn't have a database for performance reasons. Typically, for anything where you have users or dynamic data, it's a good (not 100% required still) idea to use some sort of database. However, for anything that doesn't require complicated relations it might be a good idea to just use redis (which has a good library for python) and not have to deal with the complexities SQL brings with it. If you absolutely need the power relational databases have to offer, elixer can do some of the abstraction I spoke of, though you'll still want to be familiar with the underlying database.

I personally find knowing my way around databases useful, but I also think that things are moving away from needing to really have a strong grasp of them and if you don't want to hassle with it you'll be able to "get by" at least. Hopefully that all made sense!

mk  ·  2211 days ago  ·  link  ·  

I'm not sure I follow the bug.

Are these url links?

BT  ·  2211 days ago  ·  link  ·  

In my above post I wrote the following:

  [test](http://test.com) this is a test
Which here results in: (edit, the "bug" also appears here)

testthis is a test.

Because I saw improper spacing I clicked "edit" and my markup appeared as the following:

  [test](http://test.com))this is a test
The fact that it's altering my markup seems troubling. Was my original syntax incorrect? Is this intended behavior? Am I doing something stupid?
mk  ·  2211 days ago  ·  link  ·  

test this is a test

Odd, I copied/pasted that. No space between the ] and ( right?

BT  ·  2211 days ago  ·  link  ·  

I'm copy and pasting too. (once more for posterity .. the exact text from my first code block in my above post)

  [test](http://test.com) this is a test
testthis is a test

I do not know if it is relevant, but my browser is firefox aurora (18.0a2 (2012-11-07)). My operating system is gentoo (3.5.7-gentoo). I don't have a full DE, my setup is pretty light.

Would you like me to try and replicate this on another device to see if this is my account or browser?

--------- Edit from chrome

testthis is a test

BT  ·  2211 days ago  ·  link  ·  
This comment has been deleted.
mk  ·  2211 days ago  ·  link  ·  

Yes, it'd be appreciated. I think I know where it's coming from, but I am trying to understand what is tripping it.

It's likely related to marking up when urls contain a parentheses, like some Wikipedia urls.

BT  ·  2211 days ago  ·  link  ·  

From win7 + chrome

  [test](http://test.com) this is a test
test this is a test

Edit: Looks like it came out right here. I'll look around a little more on my end.

Really, the parenthesis deal is wikipedia's fault (though a bunch of sites do it. MSDN comes to mind). They should be escaped. At least in firefox when you copy a url with parenthasis it's nice enough to escape em .. http://en.wikipedia.org/wiki/Winston_Churchill_%28disambigua... .. Wish chrome did that too.

BT  ·  2211 days ago  ·  link  ·  
This comment has been deleted.
BT  ·  2211 days ago  ·  link  ·  
This comment has been deleted.
BT  ·  2211 days ago  ·  link  ·  
This comment has been deleted.
BT  ·  2211 days ago  ·  link  ·  
This comment has been deleted.
mk  ·  2211 days ago  ·  link  ·  

Thanks. Let me know what you find, if anything.

BT  ·  2211 days ago  ·  link  ·  

I retract completely my previous statement concerning it being browser/os specific. It is comment content specific and I just did not test thoroughly enough. The following is the simplest test case I found that breaks it. (except not code-indented obviously)

  [test](http://test.com) this is a test
  
  (())
Which shows as:

testthis is a test

(())

Something about nesting parenthesis within a comment breaks it.

(they can be anywhere in the comment even. Technically the simplest one I've found to trigger it is thus:

  (())[]()
When posted, (())[]()) an extra parenthesis is appended to the end
mk  ·  2211 days ago  ·  link  ·  

testthis is a test

(())

Ah yes. That is a #bugski. Thanks, I'll get to the bottom of that one!

Astral  ·  2211 days ago  ·  link  ·  

Thank you! You certainly make a good teacher.

WestCoastG  ·  2212 days ago  ·  link  ·  

Wow! Thanks for the write up. That's definitely a lot to take in. I think I'm going to jump in this weekend with Learn Python The Hard Way and see where that goes. What's your opinion on Codecademy?

BT  ·  2212 days ago  ·  link  ·  

I don't have much personal experience with Codeacademy, but I've heard good things in general and I liked the little I saw.

I don't think it offers a replacement to good books or formal training (university classes or similar), but it certainly helps and could complement them.

It's up to you how you do it and I can't really offer too deep insight - I can't simply forget what I know and then relearn it to objectively judge some method of learning vs my own (and things look different from the other side if I try to judge now).

Oh, a final aside. It's good to have coding buddies beyond a point (beyond syntax, around basic algorithms and data structures I think) to talk to as you go. If you don't know any such people in actual life, finding an IRC channel that interests you and has some coders might be a good idea. Small ones (20ish users) are often more helpful and pleasant to be part of. Creating a hubski irc might be a good idea come to think of it.

Best of luck.