Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: How can I learn what I need to learn?
9 points by starshadowx2 on July 9, 2015 | hide | past | favorite | 22 comments
I have things I want to build but I'm hampered by my super-basic programming ability.

I'm a tech-oriented person, I work IT support and build computers often, but I've just never been able to get the hang of learning how to code (well).

However I really want to learn so I can build my ideas. The major problem I'm having now is that I read about so many different languages, frameworks, structures, etc. that I really can't figure out what I should be using, or what I should learn. I really couldn't tell you the difference between different types of databases, but I know that I need to use one.

I'm guessing for a web/mobile based app/service I'm going to need JavaScript, but what "kind"? React, Angular, Node, or none of the above?

Is there anywhere I can look to to learn what I should be learning so I can do what I want to do?

EDIT: so far I've used Codeacademy a bit, but it's hard to stay focused and disciplined using that I find. I've also started a few courses on Udemy but it's the same thing.

My programming experience so far is using MIT App Inventor to make a Pokedex app (I think it's pretty good though) and a little bit of VB back in highschool. I do know a tiny bit of HTML/CSS and super beginner basics of JavaScript.



It probably sounds like I'm just being a shit, but any kind of anything is better than every kind of nothing.

If you're hanging around here, you've probably seen the advice again and again in terms of projects: get something (terrible) working, and start iterating. A working project in the wrong language is almost always better than not having a project. Programming languages/tools are similar. Thinking about the "right" language or framework before you start is putting the cart before the horse in a big way.

The reason for both of these is that most of the "hard" work is actually not the code itself. In the case of a project or product, the "hard" work is figuring out what to build and how it should work. In the case of becoming a better programmer, the language or the framework is only a slice of what you learn by building a project.

Almost inevitably, regardless of the technologies you use, you'll make some decisions you'll wish you hadn't in a few months/years. This is especially true when you're starting out. A project rewrite is usually faster than the initial creation, and you'll tend towards picking up additional languages/frameworks faster than the one(s) before.


* This isn't to say I don't do the same thing; knowing when it's time to stop reading and start working is one of those things that lurks beyond the narrow slice of the language or tool. Over time you learn that all of the X vs. Y debates are largely a matter of taste or idiomatic requirements; those opinions are a byproduct of working with X or Y and seeing its shortcomings and failures.

The primary value of public opinion when you don't have the experience to evaluate the pros and cons those decisions hinge on is just knowing that something is good enough to use.


"the "hard" work is figuring out what to build and how it should work"

That's something I like to think I'm good at. For my major project I have a 6/7 page planning document that I've been working on, and I have design mockups made. I think I know pretty well what I want to build.

I really would like to just start/try with something, but I'm worried that could end up being a "death sentence" in the future where I find out I just wasted a few months learning something that doesn't work or help me succeed.


"I really would like to just start/try with something, but I'm worried that could end up being a "death sentence" in the future where I find out I just wasted a few months learning something that doesn't work or help me succeed."

I'm assuming you're building a web app. Both Rails and Django work. There's plenty of evidence that they work, and that people can learn either of them as they build. Just toss a coin: heads->Rails, tails->Django.

If you chose Rails, start with 'Learn Ruby the Hard Way', and then progress to Hartl's Rails Tutorial.

If you chose Django, start with 'Learn Python the Hard Way', and then progress to the official Django Tutorial, and then to the book 'Two Scoops of Django'.

You don't need to worry that you're wasting time. It's the worrying itself that is wasting time. Just toss a coin and get started.

(Many of us have been where you are.)


I've eyed Rails a bit and it's something I'm going to look more into. I just wasn't sure if it was what I was looking for.

If it's good for a web and mobile app then that's great, and I guess it can do both front and backend so that seems pretty good too. Would you say it's a better choice for my situation than going with some form of JavaScript?


Don't overthink it. Just start.

For your situation, I would pick Rails or Django. There's no reason not to start with one of those. If you decide you want to use JavaScript, then your next post on HN might be in one year:

"I've been trying to learn JavaScript for the past year, but I'm struggling to get anything built. Every time I think I get it, I read about another new stack which is meant to be better than the last. I started with just JQuery, but then Backbone, and then Angular. Then I heard about React and decided to start again from scratch. But I can't get past the todo app examples..."


I think you're still talking about a small slice of what you can learn by getting your hands dirty, even if it's all "wrong" and you learn a language that can't be re-used. The "slice" thing is especially true early on.

Rather than a "death sentence", try imagining the 1-10 scale of outcomes a year from now is like:

  10: knowing how to accomplish real work on a project 
      with proven economic value in a language with infinite 
      high-paying jobs available
  7:  knowing how to accomplish real work on a non-commercial 
      codebase in an obscure language
  3:  having an elaborate plan but no work
  1:  having nothing


The only thing is, I have no inclination in any way of coding for a job. It's not what I want to do with my life, I just need to learn it to get things started. I don't just want to be another "ideas guy" who can't build his own MVP/Beta and then ask a technical co-founder to do everything for me.

In the future however, hopefully I will be able to hire good coders and not have to do as much myself, yet still be able to understand and help them. Coding for me at the moment is just a means to an end. Which is why I really don't want to waste any time with this and am looking to professionals for help.


Are you genuinely interested in learning how to code and just don't think it would be as fulfilling as operating the business needs?

If not, that might be your issue with getting started with programming. Being an "ideas guy" who is effective at both creating products that add value for their target audience and describing your vision to others so that they can share it is just as valuable as writing code. If you are more interested in strategic vision than writing code maybe you should focus on finding someone technical to share your vision.

Remember, every Jobs needs a Wozniak.


I 100% agree with you. If I knew someone technical that I trusted I would be all over trying to convince them to work with me. Believe me when I say I've tried, but my current location is not a good place for people with technical skills.

It's actually been quite frustrating so my next step is try to build an MVP/prototype myself which I can then hopefully use to either get into an accelerator or to show investors who have the connections I need with good technical people. Other than that I am also trying to figure out how I can get myself to SF and actually be able to go to meetups/etc.

It's not like I hate the idea of coding, like I said I'm still a techy guy, it's just more like a chore to me at the moment. Not something I really want to do but it seems like I have to. I've read so much about lone non-tech founders struggling or not getting looked at, so until I can get a partner I'm sorta stuck without many options.


I'll try a less pithy approach:

In 2009 I started learning to program for an art project I wanted to get off the ground. I had taken a few courses in programming several years previous, but outside of the context of projects I cared deeply about, it didn't stick. I copy-paste-modify-hacked my way through a really terrible initial php project. The code was godawful, but I eventually got it to work.

Once I had this out of the way, it was only about 9 months before I saw my first opportunity to apply programming to an academic project. Once I had the modicum of confidence from scraping together a shitty project, I knew I could scrape together another one, and I had a small but growing sense of the sorts of things I could accomplish with code (i.e., the growing ability to see ways to use code).

About 14 months after I'd started hacking together the first project, I realized that there was another personal project I wanted to build, and that I was at least interested in doing a computational project for my fine-arts thesis. So I took up programming for a small text MUD I had been playing for a decade. The language used to program the MUD isn't really used for much beyond developing MUDs, though it is a predecessor of Pike. I spent the next year programming intensively on the game in my spare time, before I started building my thesis project in Python.

I didn't already know any Python, but after having learned one language pretty well, it was pretty easy to pick up along the way. I wasn't really planning to be a programmer; I was just a student in the arts using programming in ways that interested me.

Learning to program to build a project is good; you have a strong motivation and well-defined goal. You're inevitably going to make choices now you won't agree with in some number of months, because you're growing. If your first project is a keeper, you're probably going to end up rewriting it (or having someone else do it, if it's commercially successful) just to fix the problems early projects tend to have. This is why it isn't essential that it be in the right language or framework. Four years after I built it, I rewrote my initial project (still in PHP) to fix a lot of those issues. What took me weeks of round-the-clock hacking to get together in the first place took me a couple days of spare time to rewrite.


This is not the right attitude to have when you're starting from square one. EVen if you learn something that isn't immediately useful its still valuable programming experience and since you're picking things that will be relevant to building apps it will most likely be relevant later on or in another project. You can't just skip the baby steps and expect to be able to cultivate a expert level understanding of the technical tradeoffs involved in designing a system. You're more likely to get stuck in an analysis paralysis if you aren't willing to take small suboptimal steps towards your end goal.


To a large extent, you just need to pick something and try it out. Start small, build something with react (or whatever). If you like it, great, maybe build something else with it. If you didn't like it or got hopelessly stuck, try something else.

I don't have the link now, but there was some one who made one website a day for 30 days to learn different techniques and also just to get in the habbit of shipping something. That might be one way to go.


I appreciate your advice, but at the same time I don't just want to learn to code for the sake of learning to code. I have specific goals and ideas but I'm not in a place where I can achieve them.

I should've been more specific in my post that I'm trying to learn what "technologies" (not my favourite word) are going to be most relevant/useful to spend time learning.


I'd worry less about specific technologies and more about learning the basics of building of a web app. It doesn't really matter what you use. Successful sites have been built using pretty much all languages. When I taught myself programming about 16 years ago, I bought a book on Cold Fusion that had step-by-step chapters on building a CRUD app, I used MS Access as the database, and did basic JavaScript for validation. If I was doing the same today, I'd use PHP, PostgreSQL and JQuery. The concept is the same. Learn how to create, read, update and delete records from a relational database via a web front end. Learn how to loop over records and display them. You've got to walk before you can run.


That's actually what I'm looking for. I want to learn:

- "the basics of building of a web app" - "how to create, read, update and delete records from a relational database via a web front end" - etc.

The problem is that you can find so many tutorials or books, etc. on specific things like Rails, JavaScript, or MongoDB but I don't know of anything for the actual underlying thought to using those.

I don't know enough information to be able to choose what I should look at using.


Perhaps instead ask "I have this idea, it goes like this, how the hell do I build it?"

Wait, is this the analytics for musicians idea we're talking about? (spotted in OP's history). If so... my 2 cents is that analytics is a tricky game. Platform providers have their own services be it Google or Soundcloud where such data is stored and seen. You want to access and gather that data somehow, and charge musicians to see it?

Anyway, before you can learn what you need to learn, you need to learn how the basic building blocks of your idea are made. Eg, a global highscore table, how to build one of those little suckers. Shop around the thousands of free articles on that subject. Get things working in a dev environment..... [actually getting things polished and finished takes sweat and long hours and the odd bad day. The worst thing is when you think you've had a lightbulb moment of progress, only for it to be actually confirmation that you went down the wrong road 4 hours ago, or even days ago, and in some rare cases years ago!]


Smart to look through my history, but it's not really related to that. That was something I was looking for during my research for this idea. That was more like a side thing for the future.


MIT OCW's class Intro to Programming using Python will teach you general programming concepts that are common to many languages. You will start with basic things like iterators and work through some algorithms and the basics of object-oriented programming. It is an awesome mix of challenging and a lot of fun.

There are two versions but I think they are largely the same, just organized differently. I took the earlier one:

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

Feel free to e-mail me (address in the profile) if you have questions about this particularly.


I strongly suggest looking at udacity's nanodegrees or coursera's certificates.

There are great courses and nanodegrees created by google, facebook, and other employees from big companies where you'll get to build projects and learn best practices.

Udacity recently released an android nanodegree co-created with Google.

https://www.udacity.com/course/android-developer-nanodegree-...

There are great paid and free courses on those platforms that will take you from intro to programming to deeper topics such as Machine Learning, Robotics, etc.


Freecodecamp.com is superb


I'm basically on the same boat as you (except that I am learning because I enjoy it), and with one other difference, I had no previous experience except for tinkering with things I didn't understand and didn't lead to any meaningful insights.

To get a good feel on how to write simple scripts in python, you can take the class on coursera: Programming for Everybody (Python). If you don't care about the grade, there is a class currently going. The people in the forums for that class are fantastic. There is another class starting on october 5. https://www.coursera.org/course/pythonlearn

A good follow up course which will get more in depth is Introduction to Computer Science and Programming Using Python over at edx. This class is a bit more demanding than the previous one that I mentioned. https://www.edx.org/course/introduction-computer-science-mit...

The first time around I dropped out, it was too much for me. So I took a few other classes, including Introduction to Algebra at edx to give my brain some exercise. https://www.edx.org/course/introduction-algebra-schoolyourse...

If, you are interested in learning for the love of it, I would recommend Systematic Program Design (which is divided in three parts - the first part just finished last week but the materials will remain open for people to catch up) https://www.edx.org/course/systematic-program-design-part-1-...

This class will teach a design process that can be applied to any programming language, using a simple programming language to help teach the design process. The book can be found at: http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html

There are a few other classes over at udacity that I'm planning on taking but can't recommend them yet as I haven't seen them.

Lastly, a few months ago a friend asked me about programming, so I wrote a quick and dirty blog post that has a little bit more information. Keep in mind that I'm a beginner as well - so take it with a grain of salt. http://teichopsia.svbtle.com/how-to-get-started-in-programmi...

Note: There is a paragraph about a class called Intro to computer Science over at udacity. The class mentioned in this post at edx is a better class.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: