Hacker News new | ask | show | jobs
by ahmadss 5232 days ago
As a n00b trying to learn how to program, I completely agree with your points about Ruby on Rails. After getting in over my head going through a few rails tutorials, I took a step back and realized that while I could create really basic web apps and go through the keystrokes to write code and commit to Git, I didn't understand what the hell I was doing from a conceptual level. It was rote code copying from a tutorial or a book while leaving out the layer of actually understanding what and how the program works. It felt hollow.

I then took a step back and went to MIT's OCW courses that use Python to teach the basics of CS. None of the lectures introduced Django or other web frameworks, rather, they used Python as a means to teach core CS concepts. From there, I used the basics of what I learned to create simple scripts and conceptually understand what I was coding.

Then, I slowly ventured into Django tutorials. But even with the Django tutorials, I'm taking a step back because I'm having difficulty wrapping my head around databases, structuring data models, and basically, learning how to PLAN an app before I write code.

At the end of the day, I think it is really difficult to learn how to code on your own because it is so much more than learning syntax. This is where mentors and the community comes in. Mentors matter a whole lot more than great tutorials and working on a real project with other, more seasoned developers (basically, an apprenticeship) completes the circle of going from complete newbie to "entry level programmer".

6 comments

First: Good for you going through the process of learning stuff The Hard Way.

I know exactly what you mean about the databases and proper modeling. I ended up reading through a basic book[1] and it really gave me a good perspective on how to decide what objects in your model will have database tables, which ones should have foreign keys into others, how to think of the relationships involved, etc.

I think you're right that you need to have some understanding of these concepts before you can build a web app. But fortunately, it's not that tricky! Keep at it, you're almost there. :)

[1]http://www.apress.com/9781590597699

I just Kindled the book and worked my way through chapter 1. Seriously - I can't think of a better way to introduce someone to "classes" and explain what a "class" does within a program. This book is great thus far! If you have any other recommendations, I'm all ears!

In particular, these 2 topics come to mind: - Algorithm design - Data structures

I personally think software "engineering" should be considered a craft/trade. We should be apprenticed and developed under the direction of masters.

You can learn this discipline on your own, but you'll always be second rate to a developer who learned under tutelage from someone else. Whether it's in school or in the workplace, learning from others is incredibly valuable.

I support this wholeheartedly. A good mentor is absolutely critical.
I think "always" is too strong a word. That's not necessarily true. I think it's more accurate to say that it's far harder to master the concepts yourself and you'll have a better chance of mastering it by learning from another expert but I see no reason why you can't master these things yourself. As long as you don't try to jump ahead and make sure you teach yourself in a logical, stepwise fashion from concepts to fundamental implementations, to working with implementing multiple concepts at once and beyond then you'll be okay.

I think what gives the person with a teacher the advantage is the structure of the lessons. People, especially newbie coders, want to build Facebook on day 1 and they're crazy enough to actually attempt it! A person who can control that impulse will fare just as well as someone with a mentor I think. You can take a million baby steps and accomplish great things or you can take one giant leap and fall flat on your face.

Flask is another Python Web framework. It's simpler and easier get started with.

Try going through the Flask tutorial (http://flask.pocoo.org/docs/) and see if it's easier to follow.

Here's some resources for getting started with Python (http://www.quora.com/How-can-I-learn-to-program-in-Python/an...).

And if you're a total newb and need to go over basic programming concepts in a simple language, try "Tcl for Web Nerds" (http://philip.greenspun.com/tcl/) -- it's what many Web developers cut their teeth on in the late 90s.

For database stuff, check out "SQL for Web Nerds" (http://philip.greenspun.com/sql/).

FWIW - I'm looking for an apprenticeship type of project. If you code in Python and want to deal w the headache of a newbie, I'd love to talk!
For noobs who want to write web-based business apps , microsoft lightswitch seems like a much better tool.
I too am a n00b with Rails but I'm more of a reformed PHP programmer like the article describes. I can confirm that most framework tutorials are difficult and, as you say, feel hollow. The reason for this seems to me to be because there are about 10 different things going on and the tutorial can only really put a major focus on one or two at a time.

You first have to understand programming concepts themselves. This means iterations/loops, variables and assignment, etc.

Then you have to learn how language X implements those concepts. So you find out if you have to declare types and get the hang of the syntax itself.

Then you have to get into databases, how those work and the planning as you say.

On top of all that you then have to learn how MVC works which means you'd better get comfortable with OO programming, then learn at least 3 more languages if you don't know them already (HTML, CSS, js). Then you have to know how the server interacts with your code, and on and on. Oh, and don't let me forget learning your tools. The command line, your deployment tools (even if it's just FTP), version control, servers, and your text editor. There's a ton of stuff to wrap your head around just to write a simple blog script!

If you're new to programming and learning any framework you're screwed. You end up just copy-pasting code that you have no idea what it does and you haven't learned a thing. I think the article makes the real common sense point that in programming, just like any skill, you have to master the fundamentals before anything else. A lot of words and explanations just to say "learn the basics before moving on or you'll never learn anything". But I'm glad he said it, it was a good article and made sense.