Hacker News new | ask | show | jobs
Ask HN: What laptop should I buy for programming and path to take?
7 points by joshfenmore 4465 days ago
Hey guys,

I want to learn how to create an MVP and launch my own projects since I am sick and tired of depending on others. Can you give me some suggestions based on the following questions:

1. Eternal question..What language to start with? And what learning path to take?

2. What laptop do you recommend for a 1000-1500$ budget? I am inclined to go for a Mac for iOS/ ruby development although I am listening to any proposal.

3. Can i learn enough programming in 3-4 months to get an MVP up and running? And what online courses you recommend me?Free or paid, doesn't matter.

4. Software combo/books to use to make things easier for a beginner?Or anything else for that matter.

I am really hungry to learn programming and since I don't have a CS degree I am kind of confused on how and where to start. I am willing to put between 10-15 hours a day (no BS) for the next 6 months just to get to that MVP stage. As I said I'm extremely hungry and eager to learn programming and anything tech-related. Thanks in advance for your help.

Joshz

6 comments

Here's what my opinion is on those questions. (I'm an Engineering student, web-developer in my free time).

1. I don't think it matters a huge deal which language you pick, as long as you choose a language that makes sense with the kind of project you want to launch. If your project is web-based (a web-app or service) you'll need to learn html, css, javascript (jQuery will get your pretty far without needing a very good knowledge of javascript and there are tons of examples you can use). But those will pretty much only help you with the front-end (so you'll still need a language that runs on the server and deals with data, sessions, basically doing stuff that cannot be done in the browser of the user.) There you can go with Python, PHP, Ruby, Javascript (nodejs)... of course I could give my opinion which to start with but I'm doing this too long to have an idea how long each of them takes to learn looking at your time-frame. And if you've never done programming you'll have to take time to understand why and how certain techniques work that frameworks use such as MVC.

If your project is going to be an iOS app the most logical way to go is with objective C.

2. I've bought a Macbook Pro 13" 2 years ago, upgraded with 2*8GB ram, 120GB SSD and a caddy for my 500GB HD, and it still runs very very well for development. Mac-apps tend to "just work" most of the time, and as OSX is based on unix most of the tools that will run on a server will work perfectly on OSX. The only limitation you get from going with mac is most games don't work on OSX but that's perfect as those only distract you from learning/working.

For iOS development Xcode (which only runs on OSX as far as I know) is the best you can get and most tutorials you'll find will be working with xcode. For ruby I've heard it's a bit annoying on a windows environment but whenever you go with OSX or Linux doesn't matters.

3. I think 3-4 months isn't going to be enough, perhaps others think otherwise but I think you'll need at least 4 months to get stuff done in the language you're learning and only than you'll be able to start working on your MVP.

4. That will depend on what language you're starting out with. Something I think can help a lot is knowing someone you can ask questions to while learning/building your MVP when you come across problems you cannot solve yourself or don't know how to go on from where you're at.

Thanks for the reply. Luckily I am not gonna start from scratch scratch since I have a little experience with front-end and I am "familiar" so to speak, with the programming "environment" but I never really dived into it (a very stupid decision).

So for:

1. Some people told me I should start with C and go on from there, while others told me to start with C# or Python. Am I wasting time with C? I've seen some articles here where some guys went straight RoR and managed to get an app running in months. I feel like I would skip important stuff if I do that. How important is the order in which you learn these? I think this is the hardest thing for me. To choose which one goes first on the backend side I mean.

2. So it shouldn't be a problem to go for an old mac right? I don't have 2K right now for a maxed MBP.

3. Well I figured I can do it on a 10-15h a day marathon for 4-6 months. So I can't do a YC demo for example?Something to show to investors or enough to express an idea?

4. I believe I got this covered although everyone is pretty busy these days:)

I am actually working for a startup who is prepping an app for investors approval, and what we have found is speed, and progress is important. I would definitely recommend RoR because the speed to development is so critical. With Rails it isn't unrealistic to have a MVP within 3 months. Especially with 10-15 hours a day.

And you can get a macbook air for around $900-$1300. That's all you really need, nothing fancy.

And if your app is meant to be mobile, you can get deep into mobile web development and even create a very native experience. That's what forecast.io did.

Also as you probably know, in startups it's more about proving a model than having a fancy piece of software. Think about what features are going to attract customers asap. Iteration is easier when you have customers giving you feedback.

IMO RoR is the fastest way to make those vital iterations. Once you're sitting on your $5 million in venture cash you can worry about architecture and scalability.

I've seen some online courses like CS50 with C and MIT with Python. The question is why are they starting with those programming languages and not going straight to high level languages?

That is one of my main worries actually. I want to have a solid foundation and principles of how I should build something. Or is my thinking flawed?

The goals of those courses are different from the goals of building complex software. Courses are designed to teach you how a language works in both theory and practice and they generally go through a language and help you understand what parts of it do and why it does what it does.

Nearly all modern languages have developed as some response to C, and Python is also studied because it has a good reputation as a first language.

Software development is about coordinating work so that it produces a product that is reliable and also on time and under budget. This is the sort of thing you can learn, somewhat, by examining the code and work done in open source, but mostly you learn it by working in a (good) software development office. It's important, but not something that is easy to teach while you are also learning how computer languages work.

Good advice. I find a lot of games (Steam-wise) do work natively. If your Macbook is powerful enough, running a windows vm works well too - or you can bootcamp.

There's always the option to get a Thinkpad and run Linux. shrug

Though I have separate computers for work/gaming. It's a good divide.

I wonder if those games that come from steam are really native or run in a wrapper, such as cider. Anyway like you said, you can use bootcamp and most games will run pretty okay! (But not as good as on a dedicated machine with a decent graphic card of course). I've had no luck yet with running any games trough a windows vm (I've tried both parallels and vmware).
1. It depends what platform you want to target with your MVP, and whether you have any coding experience. Generally, web technologies have a somewhat gentler learning curve than iOS/Android, and can still reach mobiles. If you're starting from scratch, learn HTML and CSS and make some simple static pages. Then once you're comfortable, learn a high level language (eg. Ruby or Python). Then learn a web framework for that language (Rails if you're focusing on Ruby, Django if Python). You'll probably want to pick up some Javascript too.

2. Macs are popular for iOS, Android and web development so they're a good choice.

3. It's possible but it will be a lot of work. I don't have any recommendations on beginner courses. Maybe check out reddit.com/r/learnprogramming

4. As you implement your MVP, try to break each problem you face into smaller, manageable chunks. It's much easier to solve several easy - medium difficulty problems than 1-2 hard ones.

> Generally, web technologies have a somewhat gentler learning curve than iOS/Android

I have not enough experience with iOS/Android development to know, but I wonder if it isn't somewhat more easier to learn iOS for instance since it's just one language and IDE you have to focus on, while for web-dev you need to learn multiple languages. (Though at a certain point you'll need a server-side language to give your app the ability to communicate with a server...)

> If you're starting from scratch, learn HTML and CSS and make some simple static pages. Then once you're comfortable, learn a high level language (eg. Ruby or Python). Then learn a web framework for that language (Rails if you're focusing on Ruby, Django if Python). You'll probably want to pick up some Javascript too.

Exactly what I was thinking, but you gave actually steps.

iOS (and I'd assume Android as well) is a grab bag of technology. To learn it correctly, you'd need to learn about memory management, enough graphics to understand how to draw to the screen, interpret touches, etc. All of that is wrapped up in a complex API.

Web development has many layers to it, but each layer is pretty straightforward and it all starts and ends with producing a text string (the web page) which is a much easier concept to get your head around when you're first learning.

My advice, start from Linux. It exposes all the moving parts, has the best tooling, and pretty much anything you learn about it is applicable to Windows or OSX - though there are parts of both that are unique. A mainline distro with a long term support release makes sense.

Hardware, cheap laptop and a cheap desktop and a decent keyboard. I am partial to the Microsoft Natural Ergonomic 4000. With two computers running Linux you can learn about networking, hardware configuration, ssh, and using the shell.

Next, Emacs [or maybe Vim] there's a reason these are around after decades. Emacs is fully programmable which if your into programming makes logical sense. Plus it forces you to use the keyboard and the keyboard is the fastest most reliable interface.

Language? For learning programming nothing comes close to Racket/Scheme. Racket is huge and provides tools for just about any programming paradigm. The two best programming introductions are How to Design Programs and The Structure and Interpretation of Computer Programs. Both are free on the internet.

Racket: http://racket-lang.org

HtDP: http://www.ccs.neu.edu/home/matthias/HtDP2e/

SICP: http://mitpress.mit.edu/sicp/full-text/book/book.html

As far as equipment goes, I heart my MBP, but anything with an SSD drive that runs some flavor of Unix/Linux is what you need for most development. Adjust what you buy according to your budget, but unless you're wanting to do 3D graphics, the SSD is a much bigger usability factor than the processor in most laptops.

The learning curve for web related tech is much gentler than iOS or other compiled programming in that you can produce usable projects more incrementally and learn more about how stuff works as you go along. Just pick up an oreilly or other tech book on the framework you want to learn and it'll walk you through. You don't need a CS degree to learn how most of it works and it doesn't take long hours. It just takes patience and being willing to Google/man -k the things you don't know. And there will be alot you don't know.

Django is very friendly on the learning curve side, but deployment can be tough. I don't know about Ruby on Rails as I haven't touched it. PHP has a low learning curve, but also a large community of less capable users which can give it a bad rep.

Start with Ruby, build some command line apps. Make a chess/checkers/other complicated game to cement in object oriented programming. Move to Rails. Learn some SQL(sqlzoo is probably enough). Rails has a lot of magic, if something seems magical learn what it does until it is no longer magical. After that, add some javascript/jQuery to your rails apps. Once you feel comfortable with that move onto a frontend framework like Backbone or Angular.

http://www.amazon.com/Beginning-Ruby-Novice-Professional-Exp... this is a good book for the Ruby path.

http://ruby.railstutorial.org/ This is the go-to rails tutorial. But beware that he doesn't explain things in super fine detail, so if Hartl tells you to do something that you don't understand stop and do some research on whats happening. Expect to spend a day or two on each chapter.

A lot of people recommended me ruby but I feel like I'm loosing the foundation of programming and maybe somewhere along the line I won't understand something because I skipped it.
This is correct. Start with something like C#, Java or Go.
First question for you is I want to develop an MVP for what type of project? Depending on what you want to create, that will g a long way in determining your language and possibly your platform for developing it.