Settings

Theme

Ask HN: Going from programmer to engineer

29 points by srverma 14 years ago · 34 comments · 1 min read


Hey HN,

Long time lurker. I've finished up enough schooling to become a mediocre programmer. What I mean is I've learned enough C and done enough labs like implementing a paging algorithm or building a socket to be considered a mediocre programmer.

I want to take it to the next level though. I have plenty of ideas that I think up of where I'm like "why can't I just write software to do this, it'll be much easier". However, every time I sit down and try to learn MVC or django or iOS to implement my ideas I usually get stuck and flail and call it quits. Kind of a shame, I know, but I need some advice on HOW it's done. What resources or books do you use to go from someone who can do some kinda cool stuff to really cool stuff? I'm looking for that jump from amateur programmer to someone who can build a web app after a good few months.

What resources have you used to get there?

mcantelon 14 years ago

Maybe start with microframeworks. Something like Flask (Python), Express (Node.js), or Sinatra (Ruby). Once you get a bit comfortable in them start using template engines to separate your logic from your presentation. Then look at adding libraries to support different storage engines, etc.

Using microframeworks, you will basically have to implement a lot of things from scratch, but you'll end up recognizing the patterns of common web application development. Knowing these patterns will make it easier to learn monolithic web frameworks like Django. It'll also motivate you: at some point having to reinvent every wheel gets old.

Try a lot of things and make lots of mistakes. At some point it'll all just make sense.

NeilSmithline 14 years ago

IMO, find an open source project on Github that you think is cool and is, at least, partially working. Then eyeball the code, ping others working on the code, etc... You should be able to find a project that is a good fit.

Because you'd be joining a project with other devs working it, you'll be able to start with small changes and progress to bigger ones. As you're not the only dev, you don't need to get the whole thing done, just your little piece.

As the project already exists, you'll be able to look at the code's design and work with the other devs to learn.

Like you, when I wanted to learn Ruby, I was nervous biting off a big project. So I worked on the org-ruby gem. I only made a tiny mod to it but that gem is one of the gems that Github uses. IMO, that's very cool.

You can look at the pull request history for the work I did at https://github.com/bdewey/org-ruby/pull/20 - If you read the interchange I had with the developer, you'll see that he really helped me understand Ruby, Rakefiles, and the org-ruby gem.

I imagine that the gem owner spent more time helping me than it would have taken him to implement what I did, but he seemed happy to help.

When you think you've found a good project, you may want to send the devs the question you posted here and see what they say. Perhaps they'll be thrilled about the help, perhaps not. Better to figure it out before you start.

  • srvermaOP 14 years ago

    Wow - totally forgot about Github, after reading your exchange I think I certainly have a new avenue to look into now. I know reading about programming is never a good substitute for actually doing, but seeing other code helps out tremendously. Thanks!

issa 14 years ago

You really can't go wrong here (ish). I recommend picking a language/framework you are comfortable with and just start building something. PHP, Python, or whatever. Just dive right in. There is no secret---just try, make mistakes, learn from them, try again. repeat.

brittohalloran 14 years ago

I'm a mechanical engineer who taught myself to code and now I've written a full-blown web app. I'd recommend jumping right into Rails and building and breaking stuff, which is how I learned.

On the plus side:

-There's a TON of documentation, resources and help online.

-It's really fast to get started, so you'll get quick wins. This is key for motivation.

-It will slowly introduce MVC to you, but you don't have to build it yourself to get started.

On the minus side:

-There's a lot of 'magic' stuff going on, which can be confusing when you're used to explicit C code.

  • srvermaOP 14 years ago

    Heh - its funny, I was really unnerved at my last internship where I was using PHP, it felt so weird with all this abstraction because of my C background but it felt really nice being able to not worry about to details and let the magic take over as you stated.

    Anyway, when you say Rails, are you talking about RoR, or just plain old Rails (is there a difference)? The stuff you learn from rails, did it teach you good software engineering or mostly implementing a specific type of web app?

    Thanks for the advice though. Giving this stuff a try now!

    • brittohalloran 14 years ago

      Yeah Ruby on Rails (same thing).

      After building something for a couple months I feel like I have a decent grasp on MVC, which is the biggest win. I also have a lot better grasp on all the moving parts of a web app (website) -- how requests are routed, how it interfaces with the database etc...

    • dolphenstein 14 years ago

      Check out web2py as well. It started life as an aid for teaching web development, so it's geared towards getting you to focus on the important bits (and not on configuration/boilerplate code).

    • fsniper 14 years ago

      There is Ruby the language, Ruby on Rails the framework or simply RoR or Rails for the lazy ;)

keyle 14 years ago

Just do your own thing. I wrote a lot of PHP when I was learning 10 years ago. Because it was PHP everywhere and that's all I had in hands. Do I do a lot of PHP today? Nope, occasional hacks and quickies, that's it. But from there I went to actionscript, javascript, C#, Flex / WPF / Silverlight... Touched C, C++, Haskell, Python, Go... Heck I even have some Haxe on my computer.

Whatever you have in hand, pick it up and do stuff. Pick a language that you can run easily, debug easily, and that is mature in the sense that whatever you google for, you will find. Try and pick a project that you are passionate for and open a github repo and give it your best shot. Try and implement the same thing in different languages if you think it's fun, or try tackle large problems with simple solutions that may only work 60% of the time.

Who cares, just do stuff that you can then show. Get an internship anywhere, stick in for a year or two. Then move on to the next place. Surround yourself of smart developers. Seek them and see how they think. Not wankers, genuinely good people. Not only they know their job, but they will love passing on knowledge. Ask them to review your stuff, bounce ideas, dumb questions, everything. That's far better than books IMO.

One thing is for sure, I don't learn much from books. Books help when you have a very gritty issue you feel totally helpless against. But most of the time, books as thick as bibles will drain you and turn you off and make you call it quit.

It's a computer, it can do anything. Period.

EDIT: do read books still, watch talks, they greatly open the mind.

  • DanWaterworth 14 years ago

    > It's a computer, it can do anything. Period.

    Anything? I assume you mean it can compute anything, right?

    So you could write a computer program that determines whether two distinct programs do the same thing? Or whether a batch job will ever finish? Or whether you could substitute the variables in a equation with integers in order to satisfy it? Or a hundred other tasks that have been proven impossible?

    • keyle 14 years ago

      Of course it can't do anything. The computer just hasn't found the person to tell it how to do it yet.

      • prophetjohn 14 years ago

        No; the halting problem (etc.) is unsolvable. We're not just waiting for someone to figure out how to solve it.

blaabjerg 14 years ago

How do you get stuck? Are there actual technical or pedagogical barriers, or do you simply get bogged down in the amount of stuff to learn?

If it's the latter, I think some structure and simple project management could help. Break down your projects into smaller, more manageable parts that you can focus on and actually complete before you get stuck.

"Nothing is particularly hard if you divide it into small jobs." - Henry Ford

  • srvermaOP 14 years ago

    I think the first part -- what I've learned in school has given me a good foundation to programming, but I'm not sure how to take functional C programming and make web apps out of my knowledge.

    I've tried reading some tutorials and there is also a ton to learn, but it's mostly the pedagogy of learning something like MVC. Although, I certainly agree with what you're saying about dividing. That does help me nudge further along anytime I attempt these projects.

    • dolphenstein 14 years ago

      MVC is just a design pattern. Nothing magical. I'm sure you came across many other patterns whilst learning C programming.

ssmc 14 years ago

For me, motivation is key.

I pick something I want to make, and make the feature that provides the most "bang for my buck" per say.

IE: When I tinker around with my Arduino Uno, I always try to get something to move first (turn the motors). Huge motivational boost for me. THAN, I figure out how the heck to get it to talk wirelessly with my laptop.

krigath 14 years ago

Stuck learning Objective-C? This should kick you off: http://www.youtube.com/watch?v=1Xqn5IHbusA

65 really simple to follow tutorials, most of which are 6-7 minutes long. He does tutorials on pretty much everything; from iOS to go kart building.

double051 14 years ago

If you find yourself stuck anywhere with MVC or Django or iOS or anything else, going to http://stackoverflow.com/ will almost certainly save you time and frustration.

yitchelle 14 years ago

Dude, you will need to jump in, and preserver with it. You said "my ideas I usually get stuck and flail and call it quits", quitting means that you will stop learning. As soon as you quit, the game is over. Persistent is one of the key ingredient to gaining the knowledge.

I think that you should join an open source project that uses the same framework that you want to learn. There are plenty of projects from github, source forge, bitbucket, google code etc. That way, you get access to already code that is working, and able to get some guidance from the folks already working on the project.

Good luck!

aswath87 14 years ago

This is what helped me.

1. Focus on one simple app, one framework(I'd recommend Django over Rails if you are new to web development), one reference book (http://www.djangobook.com/). Quick goals and instant gratification helps when you are starting out. 2. Reading the relevant chapter(s) of the book before starting the implementation has worked better for me. 3. Build the UI first (use Twitter's Bootstrap to get this done quickly). I am more motivated when I 'see' the end product.

capkutay 14 years ago

Focus and diligence are probably the most important tools to succeed as a software engineer. Also, having lots of mental stamina is helpful. You read the tutorial, write code, get stuck, take a break, re-read the docs, write more code, repeat. Only way to do it...

Possibly collaborate with somebody? Some people work best alone, but pair programming or working with someone else can help you stay focussed, learn and teach with others, etc. Good luck!

overgryphon 14 years ago

One small step at a time. It doesn't matter what platform, framework or language, you pick a project and figure out what simple thing you can do to start.

You make mistakes, fail, backtrack and all of that is necessary to reach your goal. Amateur or not, everyone gets stuck and flails around for awhile. The difference between the person who has a few app a few months later and the person who doesn't is whether they kept going when they got stuck.

signalsignal 14 years ago

The best resource is building something you consider useful. Start small and make it a personal project. Don't even think about making money on it or else you will destroy the enjoyment of making it. It doesn't have be long term, in fact it is better if you don't plan on maintaining it but instead build it and evolve it with every iteration.

tonyjwang 14 years ago

I've started and stopped programming, but feel like http://www.teamtreehouse.com has been really helpful. They have lots of videos to help fill gaps in knowledge, with a bunch on building web apps from start to finish, including RoR and other languages/frameworks.

viscanti 14 years ago

How you deal with the frustration associated with learning programming plays a huge role in how far you'll go. You can't read a book to learn how to press on when frustrated. The best engineers that I've ever worked with had an uncanny ability to motivate themselves through those intense moments of frustration.

  • vellum 14 years ago

    Marco Arment had a good quote about frustration: "And there will certainly be hard parts: you’ll get frustrated, go to Google, find some guidance, bang against it for a while, then finally get it working and experience immense satisfaction for as long as you can go before hitting the next wall of frustration. Fortunately, as you get more experienced, you’ll hit those walls less frequently."

    http://www.marco.org/2011/02/01/how-should-i-get-started-wit...

yawniek 14 years ago

its simple: try harder! learning a language is usually much easier than learning to use a framework efficiently. it just takes time and a lot of motivation. so its completely normal that you get stuck.

jwingy 14 years ago

It's kinda funny, because I often think this way but in the opposite direction. How the hell does one build a socket anyways? (Yes I will go and google this now so save your lmgtfy links :))

ecto 14 years ago

Buy an Arduino and hack on it! It will open a lot of mental doors for you.

If you're not down with electrical engineering, just start a web project. I've found the easiest way to learn is to do.

  • srvermaOP 14 years ago

    I've actually used an arduino before in a robotics class, was loads of fun and something I enjoyed!

    Although, I'm sort of looking into building some web / mobile apps now.

yashchandra 14 years ago

You can ask yourself a few questions and get started accordingly. For example, what languages are you interested in ? PHP ? Python ? Java ? Pick up 1 of them. Since you mentioned Django,I assume you are working with Python. But then, play around with at least 2 frameworks. May be try Flask (micro-framework in Python) which I am falling in love with. Build the same app in both frameworks. I personally did User management/registration app in both Django and Flask. Start small. Build layers on top. There is no one way of course but building a few small apps just for learning will help tremendously.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection