test

What is a good tools checklist to become a programmer?

Page 1 of 2 [ 20 posts ]  Go to page 1, 2  Next

K_Kelly
Velociraptor
Velociraptor

User avatar

Joined: 18 Apr 2014
Age:23
Posts: 413

13 Jun 2014, 7:38 pm

I am looking to become a beginning programmer and someday want to work my way up to above-average. What are some good tools and knowledge that will be useful for starting this goal? Besides the obvious need for a source of information on how code works, what are other tools/knowledge the seasoned amateur's already know?



Kurgan
Veteran
Veteran

User avatar

Joined: 6 Apr 2012
Age:26
Posts: 4,168
Location: Arrakis

13 Jun 2014, 7:51 pm

My best answer would be to get a degree within computer engineering or electrical engineering. Anyone can learn programming from simple tutorials, but most of the code written by amateur programmers does not look particularly nice under the bonnet.


_________________
“He who controls the spice controls the universe.”


beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age:31
Posts: 4,766

13 Jun 2014, 8:33 pm

Good question. My programming skills have slowly improved over nearly two decades. I have taken only one programming course (which involved just copying code), but as time has gone on my programming has improved.

Just keep trying stuff. Think of something you want to accomplish and find out how to do it.


_________________
My blog:

http://beneficii.blogspot.com/


LoveNotHate
Veteran
Veteran

User avatar

Joined: 12 Oct 2013
Age:44
Posts: 2,002
Location: Northern USA

13 Jun 2014, 9:34 pm

Kurgan wrote:
My best answer would be to get a degree within computer engineering or electrical engineering. Anyone can learn programming from simple tutorials, but most of the code written by amateur programmers does not look particularly nice under the bonnet.


Do this ^

Programming is largely sitting in front of a computer and grinding out code; it is a "grunt job".

In my opinion, this is good to know:
-conceptual OO modeling - you need to understand how to conceptualize hierarchies, dependencies, inheritances, relationships among OO objects
-data structures - if asked to build a program, then what kind of data management structure is best for the job (e.g., parallel arrays or linked list or ... )
-data management - understand query language like SQL as programmers will often have to access database management systems in their code
-pick a language - programmers get pigeonholed into a specific language because employers mostly want experts, not jack-of-all-trades
-basic statistics (totaling numbers, computing averages .. as programmers often write code to display data)
-discrete math - recursive functions, recurrence relationships .. as sometimes you have to apply unordinary logic to the computation of data



Tsproggy
Toucan
Toucan

User avatar

Joined: 16 Jan 2011
Age:25
Posts: 280
Location: Carson, Nevada

13 Jun 2014, 10:04 pm

If you have a friend or friends who program learn the language they're learning. It'll be easier to ask for help and for them to help you. If in case you don't know anyone else who programs I recommend C# for your programming language; It's the one I use mainly and my personal favorite. Other than that you don't need much, if you want help writing your code I strongly recommend an IDE (Integrated development environment) which will help you correct mistakes, automate writing, and provide you with away to rapidly create your programs! The IDE I use is Visual Studio, I've used this same brand of IDE since I first started writing programs (Visual Basic 6 days). You can download it for free here.

Programming is one of those great things you can be great at without having to go to college for it. Books are great and can help you along but I've found the best way of learning is to have a small project in mind and learn as you need things. For example, you want to make your own version of a calculator, you can look up on Microsoft's developer network how to perform operations on variables, use events, edit the UI of your program, etc. Don't be afraid to type your questions into Google, here's a common input I search when I'm stumped on something for example: [Language I Use] [Framework if any] [Question] I've done it like that for years and am still going strong! Good luck & happy programming!

Quote:
My best answer would be to get a degree within computer engineering or electrical engineering. Anyone can learn programming from simple tutorials, but most of the code written by amateur programmers does not look particularly nice under the bonnet.


You will almost never enjoy reading another person's code as we all have our own styles; A college degree does not make this any better but it will make you look a little better on paper. I'm sure you would do equally as well in an interview if you linked your employer to an online portfolio of software you've made.

Also, sadly if you are interested in strictly computer programming and go into computer or electrical engineering you're going to do 99% other subjects and if you're lucky you'll get a class in C++ or something.

Quote:
Good question. My programming skills have slowly improved over nearly two decades. I have taken only one programming course (which involved just copying code), but as time has gone on my programming has improved.

Just keep trying stuff. Think of something you want to accomplish and find out how to do it.


Copying and pasting doesn't help you understand any better, even if you're following along you'll just dump everything you hear/read as soon as you leave the room. I've found solving your own problems and learning from documentation and quick methods from people online works well.



Dot net pearls

Microsoft developer network

Visual Studio Express (IDE)


_________________
I haven't failed 1,000 times, I've just found 1,000 ways not to do something.


thecheeseisblue
Tufted Titmouse
Tufted Titmouse

User avatar

Joined: 10 May 2014
Age:24
Posts: 26

13 Jun 2014, 11:20 pm

I would just just learn to program in something. I'm not going to start listing languages or anything, because once you have solid problem solving ability and logically understand how to code, you can pick up new languages pretty easily. My job has me coding in new languages all the time, and it's not a particularly large hassle. You just have to be willing to pick up the grammar of that language and then sit down and crank out code. If you want to look at specific languages, I would recommend a static and a dynamic language. Something like Java or C# is very good for putting large applications together, and are very commonly used. A scripting language like Python is very simple and will be your best friend when you need to make things go quickly.

The biggest thing for me, and a few other programmers I know, was confidence. I don't write beautiful code, and it took a long time for me to realize that not many other people do either. And in the end, the bosses don't care if your code is gorgeous so long as it works and doesn't break again. Obviously you should aim to at least make it readable, and always comment, but I used to stress out about my code not being good enough until I realized that nobody cares. Make it go in a way that makes sense. Be as efficient as you can be, and you can always optimize after.

As far as IDEs are concerned, I've written applications anywhere from Visual Studio to Eclipse and Netbeans to Notepad (not recommended). Just get one with a debugger, because when I learned to code the IDE my school used didn't have one. If you can't get Visual Studio for free, Eclipse is pretty widely used. Python comes bundled with Idle as an IDE. For the most part to learn to program, you just need to program a lot. It's about the way of thinking and problem solving more than anything else. So, go cause lots of problems and solve them. Of course, that will help you be able to program, and not pass a programming interview. Better study up on some of the topics previously listed for that. It's always data structures.

Oh, and if you're not using a Microsoft backed language, use Linux. I can't stand trying to install packages and having to fuddle around with my PATH variable. Installing things on Windows is a pain, and apt-get is the best. Plus Linux distros often come far more well equipped to code.



morslilleole
Velociraptor
Velociraptor

User avatar

Joined: 17 Dec 2011
Age:27
Posts: 478
Location: Norway

14 Jun 2014, 6:42 am

As for creating readable code I think this an item that way to many people tend to overlook.

I often see code like : "any programmer should know what this code does" Then follows a function with a few loop, variables named 'i', 'j', 'p', 'temp', and lots of expressions like i * p /2 / j * 42 ( no parenthesis. ) This leaves me with several question :

-Did they really mean this? No parenthesis?
-What are all these variables ( what do they represent )
-Where does 42 come from? ( apart from Deep Thought )

The code might have seen perfectly logical to whoever wrote. But if the person was to return a few months later, he'd likely go "What the **** does this code do?!" And even worse if a second person wast to try to read it

So there are a few rules I try to go by :
-Be explicit
-Don't rely on PEMDAS, use parenthesis. Even if the code works just as well without
-Use good variable names.
- i and j are okay for noting indexes in short loops
- temp is almost never a good variable name.
- Don't be afraid of longer variable names, they don't have be under 8 characters.
- Split things into multiple functions
- Calling a function takes very little time, so it's worth it to have lots of functions and use their names to tell what's going on. Not only does this remove the need of a comment, but the function can sometimes be reused and it will shorten the code of the function that uses this function
- If your class ends up having too many functions, you often can move some functions into a separate file

And more generally :
If you code is flooded with comments, you're doing something wrong.


_________________
Want to learn to make games? http://headerphile.com/


Kurgan
Veteran
Veteran

User avatar

Joined: 6 Apr 2012
Age:26
Posts: 4,168
Location: Arrakis

14 Jun 2014, 9:34 am

LoveNotHate wrote:
Kurgan wrote:
My best answer would be to get a degree within computer engineering or electrical engineering. Anyone can learn programming from simple tutorials, but most of the code written by amateur programmers does not look particularly nice under the bonnet.


Do this ^

Programming is largely sitting in front of a computer and grinding out code; it is a "grunt job".

In my opinion, this is good to know:
-conceptual OO modeling - you need to understand how to conceptualize hierarchies, dependencies, inheritances, relationships among OO objects
-data structures - if asked to build a program, then what kind of data management structure is best for the job (e.g., parallel arrays or linked list or ... )
-data management - understand query language like SQL as programmers will often have to access database management systems in their code
-pick a language - programmers get pigeonholed into a specific language because employers mostly want experts, not jack-of-all-trades
-basic statistics (totaling numbers, computing averages .. as programmers often write code to display data)
-discrete math - recursive functions, recurrence relationships .. as sometimes you have to apply unordinary logic to the computation of data


This. You should also learn boolean logic; this is extremely important in programming.


_________________
“He who controls the spice controls the universe.”


wbport
Snowy Owl
Snowy Owl

User avatar

Joined: 16 Sep 2012
Posts: 125

14 Jun 2014, 11:27 am

The use of i through n goes back to Fortran, variables starting with these letters were integers while all other letters were floating point. Their use as subscripts/indices in later languages continues as tradition.

Properly indent (i.e., structure) your code. Anything done in a loop or after an if statement needs to be indented so it is easier to follow. Line up your if's, else's, and end-if ( or trailing } if appropriate). If one statement is too long to fit on a line, it's continuation needs to be indented much further.

Avoid go to (or goto) statements if at all possible. You are trying to write productive code that someone else can follow or you can a few months down the road. Programs with lots of "go to" statements resemble spaghetti and can be very difficult to follow, debug, or modify.

People use programs to "do something" so it is in your best interest to know what that "something" is. No one will have to tell you every little thing the program must do if you are quite familiar with the problem/situation already.

One useful trait in addition to others that have been mentioned is being good at pattern recognition.

---
Will that be not, "Not paper and not plastic"?



Kurgan
Veteran
Veteran

User avatar

Joined: 6 Apr 2012
Age:26
Posts: 4,168
Location: Arrakis

14 Jun 2014, 11:56 am

Tsproggy wrote:
You will almost never enjoy reading another person's code as we all have our own styles; A college degree does not make this any better but it will make you look a little better on paper. I'm sure you would do equally as well in an interview if you linked your employer to an online portfolio of software you've made.


Most of the time, you'll have to read other people's code, and most of the time, other people are going to read your code. I'm not sure about the laws in the US, but if you write code poorly, write code that's difficult to understand, and so on, you can get sued for high amounts of money here in Norway. This is why it's important that programmers know how to cooperate, know how to use frameworks, are familiar with agile programming, and all that.

Most self-taugth programmers have no idea what the SOLID principles are (and much less how to apply them), they know next to nothing about the n-tier architecture, they can't work in Scrum teams, they typically place too much code in the driver class, there are too much if/else if statements in their code, the comments make no sense to other people, their projects have a lot of dead code, they know very little about datastructures and algorithms (which one to use, which one is the fastest, when to use them, etc.), their code is poorly optimized (or if it is optimized, it's optimized prematurely), they know very little about boolean logic, vectors, matrices, recursion and other mathematical skills relevant to programming, they can't use TDD, their projects are poorly planned, and you'll typically have to resort to tedious workarounds to get their code running. If we're talking about C/C++, the thread management is usually incredibly poorly written, you'll have numerous deadlocks, you'll have starvation, you'll have memory leakages, you'll have race conditions and lots of nasty stuff. With a degree, you'll know how to take care of all this.

There are exceptions (John Carmack is a great example of this), but this is my experience with self-taught programmers; what you ask for when assigning them to a task, is typically not what you get in return.

Quote:
Also, sadly if you are interested in strictly computer programming and go into computer or electrical engineering you're going to do 99% other subjects and if you're lucky you'll get a class in C++ or something.


Subjects such as mathematics, physics, and so on, are first year curriculum, but they're nevertheless important.

The vast majority of the subjects were about programming (as well as algorithms, frameworks such as Scrum, database management, and so on) when I got my degree at the university. You're also taught SQL, C, HTML, Go, Javascript, Java, PHP, how operating systems are built up from the ground, and much more. The language that's used for the earliest programming subjects is Java, but you're free to use any object-oriented language you want.


_________________
“He who controls the spice controls the universe.”


Last edited by Kurgan on 14 Jun 2014, 5:00 pm, edited 1 time in total.

morslilleole
Velociraptor
Velociraptor

User avatar

Joined: 17 Dec 2011
Age:27
Posts: 478
Location: Norway

14 Jun 2014, 1:04 pm

wbport wrote:
The use of i through n goes back to Fortran, variables starting with these letters were integers while all other letters were floating point. Their use as subscripts/indices in later languages continues as tradition.


I always assumed i was just short for index, and j just used because it comes after i.

wbport wrote:
Avoid go to (or goto) statements if at all possible. You are trying to write productive code that someone else can follow or you can a few months down the road. Programs with lots of "go to" statements resemble spaghetti and can be very difficult to follow, debug, or modify.


Yes, goto is usually a sign of a design flaw, and should be completely avoided.


_________________
Want to learn to make games? http://headerphile.com/


Here
Sea Gull
Sea Gull

User avatar

Joined: 17 Jun 2012
Age:52
Posts: 239
Location: California

14 Jun 2014, 1:54 pm

Examples of intuitive programming/development tools may also help:

'APP Inventor'
http://appinventor.mit.edu/explore/

Another programming tool is:
www.goodbarber.com

Thank-you



K_Kelly
Velociraptor
Velociraptor

User avatar

Joined: 18 Apr 2014
Age:23
Posts: 413

14 Jun 2014, 6:54 pm

What about something ambitious like hobby development of Kernels or Operating systems, though that's not really much to be said in the beginner stage.



Kurgan
Veteran
Veteran

User avatar

Joined: 6 Apr 2012
Age:26
Posts: 4,168
Location: Arrakis

14 Jun 2014, 6:57 pm

K_Kelly wrote:
What about something ambitious like hobby development of Kernels or Operating systems, though that's not really much to be said in the beginner stage.


Most computer and electrical engineering studies have subjects where you learn that.


_________________
“He who controls the spice controls the universe.”


mrrhq
Tufted Titmouse
Tufted Titmouse

User avatar

Joined: 24 Mar 2013
Age:23
Posts: 40

14 Jun 2014, 9:13 pm

Kurgan wrote:
K_Kelly wrote:
What about something ambitious like hobby development of Kernels or Operating systems, though that's not really much to be said in the beginner stage.


Most computer and electrical engineering studies have subjects where you learn that.

Pretty much my college, or any college, would require this near the end of the senior year.
Although I'm not sure, I think the correct answer is they they teach you those at the end of a 4-year Bachelor degree program in computer engineering or computer science, depending on the college, at least.