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?
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.
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.
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.
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!
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...
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.
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?
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
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.
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.
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.
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!
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.
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!
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.
http://www.marco.org/2011/02/01/how-should-i-get-started-wit...
If you're not down with electrical engineering, just start a web project. I've found the easiest way to learn is to do.
Although, I'm sort of looking into building some web / mobile apps now.