I Want to Start Programming. Where Should I Start?

29    23 Dec 2015 23:55 by u/Herbvendor

I have learned languages- French, Arabic, Latin. I am interested in picking up new skills and I wanna start programming.

I have an old Macbook pro (2009 still run 10.6.8) I refuse to update because the new updates are TRASH. Anyway, would you suggest getting a new laptop? What kind of specs should I need?

What are some good developer tools to start out with?

I have done a few things on code academy and plan to do more. Would you suggest any books or articles that might be helpful; thing like programming theory/method?

EDT: THANK YOU ALL SO MUCH!

49 comments

8

would you suggest getting a new laptop? What kind of specs should I need?

No, to learn programming a computer from the 80es or a RaspPi 0 is enough. You won't be able to do fancy 3D graphics, but for 98% of programming it will do.

What are some good developer tools to start out with?

You need a good text editor you're comfortable working with. The rest depends on what you're going to do and on the programming language.

Would you suggest any books or articles that might be helpful

There are no books which cover all of programming and are good for beginners. Choose a problem, which is not hard if you ask a programmer, choose the tools to solve it and read the books on them. Then solve the problem with a program.

0

Python is a pretty common choice as it comes with the IDLE developement enviroment built in.

0

Python is generally a good choice. But if the focus is on a special field where python isn't well suited there are better choices. For example microcontroller programming on arduino.

0

Generally, arduino is a poor choice to start with too as its primarily programmed in a simplified version of C where the difference isnt even explained.

Edit: C++, not C

0

Arduino is not a bad choice if you look at it from the low level perspective. You can clearly read or write a bit on a pin. You don't have such near hardware access in most other scenarios. And compared to a RaspPi, it's much easier to understand completely.

0

But it doesnt use a real programming language and there are few actual tutirials. Just copy-paste guides online.

0

That depends on what you're doing

0

For simply projects like internet toasters or light following robots its fine but you'd have to start all over if you move to anoth platform because arduino is not a programming language.

0

No, arduino is not a programming language. But it's a very easy way to intercept with hardware without needing to know much software.

Sure professional electronics and software are more complicated. But IMO Arduino is a good starting point for people interested in software and hardware.

0

Not to mention python is interpreted, not compiled

0

Anaconda python comes for os X it includes the Spyder IDE as well as some science / engineering packages. https://www.continuum.io/downloads

0

What are some good developer tools to start out with?

You need a good text editor you're comfortable working with. The rest depends on what you're going to do and on the programming language.

One that I recommend is Microsoft Visual Studio Code. It is a text editor that looks nice and has syntax support for tons of languages. There are others out there, if you are dead set against using Microsoft products, but it is available for OSX (it does require 10.10) and Windows and Linux.

5

pick a language.

if UserConfig.get_language_selection() == 'python':
    print('please take a look at [http://www.learnpythonthehardway.com'](http://www.learnpythonthehardway.com'))
0

Well said.

1
  1. Start with coffee be sure to build up you tolerance as quickly as possible. Proper consumption is 5 cups per day or more.
  2. Bang you head into a wall for at least 20 minutes a day. This will help develop calcium deposits. You'll need the extra padding once you start dealing with end users.
  3. An aversion to sunlight is probably inevitable.

Good Luck!

1

How fucking true!

:-(

0

Start with coffee 5 cups per day or more

Horrible advice. The health is number one.

1

I'm not sure what you can do with the macbook pro, but a good book that helped me get the basics down was a book called "Introduction to promgramming with C++: diane zak" very low level book for absolute newbies. Then I bought a foreign copy of java by deitel and deitel(warning this book is expensive in the US, get a foreign copy, and be prepared for boredom cause the book is hella DRY) and once you can do everything in both books you'll be pretty far into programming. Next comes picking up a college algebra book and learning the math, can't program anything exciting if you don't know math. math is like the butter and code is the bread of bread and butter.

1

Update, not all the latest OSX suck ;-)

  1. Pick up GIT
  2. Sublime/phpStorm are sweet text editors ... Unless you wanna go hard core vim
  3. Vagrant/virtual box if you feel a need to try a different OS
  4. Max your ram, just max it
  5. Python, Ruby, C are always good
  6. I'd suggest node.js cuz it's the up and growing hipster language
  7. Php is awesome since it runs every where, if you do pick up laravel
  8. Your machine is good enough, get a monitor if you what a little something extra besides ram

Programming language depends on what you want to make. If you want to make cash go to the dark side and learn .net

C and Java will teach you a lot of fundamentals at a high learning curve but the pay off can be worth it if you can hang in for the long ride.

1

Your current laptop should be fine for programming. I'll echo others here in saying that you only need a beastly machine if you're going to do high end graphics or tasks that are very computation heavy. As for developer tools:

PHPStorm - PHP - Most PHP developers I know use this (if they use an IDE at all) or something similar and have good things to say. PHP is a good starting language as it's not so unforgiving as C++ or Java and allows you to focus more on the foundational knowledge. When you've got a reasonable feel for boolean logic, program control flow, and data structures, add in a strongly typed language like C++ or Java.

IDLE - Python - I know some people that use this, and they say it's good enough. Most Python developers I know use Vim and Emacs, so take this recommendation with a grain of salt. Python is a clear and easy to use language that can, like PHP, help you get a grasp on basic programming foundations before moving on to more complicated things.

Eclipse - Java - Eclipse was made for Java. I've used it quite a bit, and as far as IDEs go, it's got a lot of functionality. It's not always easy to use, but it's got everything you should need for learning programming right out of the box.

Xcode - C++ (and others) - I've only heard about this from second and third hand sources, but it's a fairly standard IDE for Mac users to use when developing C++/Objective C applications. It also comes highly recommended on StackOverflow.

You're on the right track starting at codecademy. You can also try codekata for daily practice once you get into a language. If you're feeling competitive, there is also codefights.com. There are also great courses at udacity, coursera, and udemy.

Once you feel like you have a grasp of programming basics, go for these books:

Code Complete - Steve McConnell (Coder's bible of best practices) Design Patterns: Elements of Reusable Object-Oriented Software - Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm (Common use cases programmers run across and good solutions for addressing them) The Mythical Man-Month - Fred Brooks (About software engineering process more than programming itself, but definitely worth a read) The Art of Computer Programming - Donald Knuth (More advanced book about algorithms. Read as soon as you can understand thing. Don't be too afraid of the assembly. :))

If any of this missed the mark or just isn't what you're looking for, let me know more about what you know and what you want, and I'd be happy to provide more.

1

I Want to Start Programming. Where Should I Start?

Web or software?

1

Keyboard

1

You can start with C/C++ and then learn advanced programming languages. You will learn basics of programming from C/C++, then it will be easier for you to learn other languages.

0

Hi. I'm a person that programs things. If you are starting from nothing, but want to get complicated someday, start with Python, then once feel you have a solid grasp on the difference between a "function" and a "method", start C++.

If you just want to keep it simple, run with Python.

0

Welcome to the creation culture!

As someone who has been carrying a computer in his pocket since 1979 (fancy stuff back then), start with an interpreted language. Python is awesome. So is NodeJs (aka JavaScript).

You can find lots of information and tutorials and examples for both. Don't try to learn to program. Create a goal, something very simple, and figure it out. Sweat, swear, cuss, but stick to it. When you suceed, research other ways to do the same thing (yes, post). Pick another tiny goal, rinse, repeat.

The secret to learning is unlearning. Best of luck!

0

First of all, do NOT start with a visual language. You want to start off with text. It isn't exciting, but it lets you learn a lot more about how the computer works.

To that end, I recommend you consider starting with BASIC or Python. Note that when I say BASIC, I do NOT mean Visual BASIC, I mean things along the lines of QBASIC, if you can find it. These languages are good for learning the basic programming concepts, such as what a variable is, looping, simple math, functions, and so forth.

From there, move on to C. C is a lot closer to the hardware, so it lets you know how things actually work. You will probably want to learn about pointers (but be ready for some suffering). Note that using Visual C or Visual C++ is OK for this, because while they use the term "Visual," that's more because it's of the same product line as Visual Basic. Visual Basic makes it much harder to do "just text" projects than Visual C++. Also note that, with very few exceptions and only a few language quirks, a C++ compiler also acts as a C compiler, because C++ is for the most part a superset of C. I think there are a few esoteric bits here and there that are different, but you are unlikely to run into them as a problem.

Follow that up with learning Java, and then JavaScript. I suggest them in this order because Java will help you learn about object oriented paradigms, and JavaScript is forgiving - too forgiving. In a lot of cases, having a language that is too forgiving can be useful, but when learning programming and wanting solid code, you can get what amounts to junk in there that does not produce what you want it to, and that can make serious problems for debugging it since the interpreter or compiler simply makes do with what it has rather than noting that something has been written badly.

Note that all of this is for learning programming - not practical use. The languages that I've listed are good for practical use. But practical programming (which is ideally done after you've learned it rather than hacking together a mess) will often use things that are not, for instance, strictly text. They also involve using external tools, frameworks, libraries, and other things specific to a particular language and/or platform, and this knowledge may be vital to a practical project but has nothing to do with underlying theory or a particular language's syntax. Visual Basic, as noted earlier, is an example of this - it lets you literally draw your program's interface. By doing this you can make quick and dirty programs. However, you can very easily dig yourself into a very deep hole by not knowing more fundamental aspects about the code. Other visual tools tend to suffer from this problem, e.g. the GUI builder in Netbeans for Java, which is even worse since Java was not designed to be a visual language in the same sense that Visual Basic was.

Be sure you learn more about how programming works before you get into graphics. This can be very easily a massive distraction - those who don't work with computers on a regular basis may view text-based interfaces as barbaric. They are not, and graphics and graphical interfaces can require a LOT of code. If you don't learn how to use them properly, you're going to dig yourself into a huge hole. Of particular note, you will probably want to learn about file I/O, streams, handles (in terms of concept and practice), threading and inter-process communication, memory allocation, and networking, off the top of my head. Also note that some languages will try to do this stuff for you. In most cases, it will at some point fail to do a good job, so you will need to know how to work with it. A good example of that is Java's memory allocation system, which can have a trivial program eat up multiple gigabytes of RAM if you're not careful.

Consider learning this on Linux. Consider learning Linux, for that matter. Linux is based on Unix, and Unix was in many ways designed by and for computer scientists. There is a reason why most colleges have been teaching computer science on Unix since the 1970s. There is also a distinct lack of visual languages, but many languages available, so that ought to provide some help in terms of direction. It can also help you to apply certain concepts and learn how they work and don't work. For instance, Linux has most I/O involve file I/O, which helps to underscore just what the flow of information is between devices, and how an abstract concept can be used in many different ways, often to link together two very different pieces of logic.

Be sure you learn HOW things work in each paradigm and language. It is possible in many languages to just repeat what you're doing in another language, but that's basically using a sledgehammer to cram a round peg into a square hole, at least when done across a non-trivial program. This can and does sort of work, but you will be hurting over the long run if you approach problems this way on a regular basis, especially since you will eliminate the language's strong points, emphasize its weak points, and often bring the weak points of the original language/paradigm in as well.

Do not get hung up too heavily on specific languages. There are many, many different programming languages, but the fundamental concepts can be more valuable than learning most specific languages.

Finally, one thing to note is that computer languages are NOT like human languages. A computer is a fickle beast which, at its lowest level, reacts only to specific instructions and will follow them mindlessly. It is up to you to be aware of how to talk to the computer, how to tell it what you want it to do, and how the logic fits together, and this is often no simple feat.

DISCLAIMER: Just my opinion.

0

Here's what i'm doing, because I procrastinated for seven years at this: bento.io Learn a simple markup language like Html and css first. It's a simple win that will let you know if you have the patience and disiplen to learn languages that have no absraction. You can learn ruby, python, or my current choice, javascript. It doesn't matter because you need to learn the concepts behind what each language can do ( arrays, loops, objects, and all the ways you make em.) You also need to get used to doing something you have no clue as to how it works, and then as you gain more experience you kinda finally get an idea how it works, but not really. In other words, you learn constantly how little you know.

Note that I'm at 98 percent complete on codeacademy javascript course. I use bento to track my progress. Learning this stuff is like learning to use a saw of screwdriver though: just because you can cut some wood doesn't mean you can build a house. You'll need to pick up projects to build to actually learn programming. Not an expert but I am learning slowly.

0

The biggest mistake I find people making when they decide that they want to learn programming is that they have no idea what they want to DO with programming. It's a very useful skill, but it will not stay with you if you are not doing it for a reason you enjoy, or that's important to you. You could sit there for hours going through online tutorials on syntax and algorithms, but it won't mean anything to you unless you are intending to use that to help yourself solve a task in some way. Now, before I start ranting too long....

Step 1: Choose a project.

Step 2: Choose the language and tools that are best suited to accomplishing the task you set out for yourself in step 1.

Step 3: Do the project.

Step 4: Go back to step 1.

0

I would start with free courses online like www.codeacademy.com www.udacity.com

0

In my experience you need to pick a project first with a clear goal of what you want..

Then I could tell you exactly what languages I would use to achieve it..

0

Linux is great and get the Linux Bible.

0

Where to start is something you're going to have to decide because some languages lend themselves towards particular types of problem solving. Programming is basically planning and using logic to accomplish a task or solve a problem, the real skills involved (problem solving, self learning, sensible documentation, and planning) are near universally transferable from one language to another so starting with any of the "easier" languages shouldn't be seen as a negative as long as you don't wade into a new language and expect to do everything the same way.

https://i.imgur.com/d9cU904.png (might help)

You don't really need books to get started and the only developer tools I'd suggest is a relatively comfortable to use chair+desk+keyboard+mouse+screen, as far as software goes just use whatever is most popular and standardized for your language choice because it will probably work just as well as the next option for 99% of what you'd be doing at first. The reason I'd suggest you keep away from books at first is you can get quite a lot of online video lectures, forums, reference material and documentation online, then once you've gotten a handle on the very basics (only takes 10 minutes to get hello world on screen but it can take a couple hours to understand what you've done) you can grab a book and dive in once you're comfortable.

The only thing really asked out of you is the discipline to assign your own goals and know whats involved in getting it, if you want to make a game for example you've got to understand quite a lot about never ending loops and constantly updating strings and arrays (updated within loops).

so first you might learn how a loop works (write program using a loop to add two numbers together and print the output)

then you learn how an array and string works (write a program to print and sort / manipulate each part of a string)

then you learn about taking user inputs and storing in the strings and arrays (write programs to take keystrokes(store+manipulate+sort+print them and only exits / finishes when the user wishes to exit)

them you learn how to combine your string and array inputs with other strings or arrays in loops to manipulate the results printed to screen each time the user enters a number / keystroke (write a text based choose your own adventure game using strings, arrays, and loops to enable the user to choose which door take and which objects to interact with, add and remove items from their inventory (a key to unlock a locked door for example))

Then buy yourself a book on how to program, I might sound like an ass telling you to learn how to program before buying a learn how to program book but a book can't always force you to understand a concept like strings. loops, functions, arrays etc. Beginners books can explain how to make things happen but until you've dived in and pushed yourself to understand whats happening you can only go so far.

0

You know, I've found that the better programmers I've interviewed in almost every case started off with a block structured or functional programming language. That said, you should learn C. It's a lot of work, but your low level understanding of things will be significantly better. Python is a decent language too; there is a lot of serious development in it recently, so I would recommend as a complement, but by no means should they be your only language.

0

What you need:

  • big desire (programming only for money is a big fail)

  • good editor (emacs, atom, sublime) with good practice

  • 3-4 free hours everyday for coding

  • 1-2 free online courses (edx, coursera, codeacademy)

You can't be a programmer for 1-2 week. The first reall success came after 5-6 months everyday trainings. The hard work forever pays.

-1

Installing linux won't hurt. Not a necessity though. Web is a good way to work mostly in text programming but still get some visuals. I'm a big NodeJS fan. C is a lot of fun. If you go the linux route you should do some bash scripting and learning Makefiles is powerful (people really underestimate it's power, it's multi-threaded scripting).

If you want to mess around with bash you could take any linux tutorial online and automate it in bash or a Makefile.

I actually automated this tutorial recently. https://cs.au.dk/~sortie/dopsys/osdev/ By the end it could take a raw Arch install with nothing on it, download the files needed, generate a cross compiler environment and then build an operating system on it's own. All from one Makefile. It would also do it in a way that didn't waste any available cpu time or available bandwidth. It was a sinch to do too so you can become a boss with Makefiles.

1

OSX is already a server and runs what Linux does ...

-1

It's more for the experience. Lol, osx runs what linux does. I had to build a researching environment for a student doing e&m research. Pain in the ass getting all the dependencies on there compiled to compile the end product. Linux it took like 5 minutes.

If you think Bash is all that linux does that's not right. A big part of it is the community and the packaging.

Lol, and even more common set up. Try to get Brutal Doom on a mac with gzdoom. That was hell when I put it on my friend's mac.

Also there is no way in hell you are running something like kvpm on there. So no, mac does not run everything linux does.

0

Granted my sentence was brief and open ended, still I didn't say "everything". OSX is a BSD variant.

However, your own examples prove to some extent it does. You are just combining about compile times and compile dependency issues.

Why bring up Kvpm when it appears to be a volume manager? On a notebook or desktop, how many times do you really need to resize a drive?

Bash, csh, tcsh are others.

But but Linux has a community. Thank goodness it does because without Linus probably won't have finished what he started.

I run OSX on Asus and Gigabyte hard ware because Apple is either a mini or a huge expense to buy the pro garbage can. I homebrew packages as you would apt-get.

The biggest problem with Linux is the community! Programmers like to roll their own shit. They don't want to band together very often to decide on standards and even then they ignore them because camelCase or snake_case is better. Don't get me on 2,4 spaces for tabs.

Ubuntu keeps trying but the community takes the piss out of Unity while pushing their favorite Gnome or KDE.

All the while an asshole, a complete asshole shit on his employees, told them to fuck off or make something decent and a few years later took his crappy MachKernel and got Adobe and Microsoft to program for a *nix variant. While RedHat pushed out CDs to magazines and Ubuntu barely got Firefox onboard.

Linux is not bad, I actually like it as a server OS. I also keep trying a distro every 3 years but keep rolling back to OSX since it just works even with a majority of printers and graphic cards.

So yes, I agree. Linux is more than bash on the command line.

-2

I want to be honest with you: this is a pretty faggy question.

You need to think forward to what it is you want to do. Then google around and figure out the tools youll need to do that.

Then take a MOOC or rtfm on those tools.

Then build it.

Congratulations, you are now a programmer. Sorry if this is overly cynical, its not really negative, its more of a positive. Thats really all there is to it.