Seems like I can already do that... Get a loaf of bread, a knife from the drawer, jelly from the fridge and peanut butter from the pantry. Take out a slice of bread, open peanut butter, spread peanut butter, get another slice of bread, open jelly, spread jelly, put slices of bread together. Eat. Changes coming to version 2.0 include cleaning up.
this is the fun in coding
forgot to open fridge
forgot to close fridge (memory hole)
forgot to open drawer
didn't specify which drawer
didn't close drawer, your process wil fail the next time you try to open an open drawer
didn't specify knife type
didn't open pantry
didn't close pantry, a hacker just stole all of your food
didn't open bread bag
didn't put jelly on knife before spreading - error 404: jelly not found
didn't specify how slices go together, your sandwich has peanut butter on one side, jelly on the other and dry in the middle
didn't close jelly
didn't put away jelly
didn't put away bread
didn't put away peanut butter
I'll assume "eat" is an include: file that contains the needed instructions on how to eat properly
you never established a place to construct your sandwich, and ran out of hands to hold 2 slices of bread, the knife, the jelly and the peanut butter
Remember, computers don't assume anything. You literally have to tell it to assume the laws of math exist so you can get a result when you tell it to add 2 numbers, etc. (done for you in many coding languages, but still)
PHP is a web-native language. If you're building web software exclusively, this is your best bet. Easiest to get into, and you can't beat it's simplicity of web deployment.
Python is a better designed language for data manipulation across many mediums. Google uses it because it allows them to create APIs for things like Maps than can be accessed in lots of different ways.
Ruby on Rails stresses convention over configuration and extremely strong coding standards & design patterns. I recommend using this one if you want to have a future in Internet startups / move to Silicon Valley one day. It will also force you to learn good coding practices, but will probably be more difficult up front.
.NET is like Microsoft's Rails; the number 1 complaint I see about .NET devs is that they don't understand what's happening under the hood of their app. The dev environment removes you from the low-level code, but allows you to move extremely fast. Personally I put this option dead last as I hate being beholden to MS's whims.
Javascript is mission-critical to learn regardless of what backend language you use - and Javascript is becoming a viable backend language with systems like Node.js.
It's all valid stuff. That's the thing about programming. It's breaking down what you think is the simplest possible operation down farther into even simpler operations. You then go over those operations and simplify them even more.
You take a person, break them down into organs, break those organs down to tissues, break those tissues down to cells, break those cells down to proteins, break those proteins down to amino acids, break those amino acids down to molecules, break those molecules down to atoms, break those atoms down to protons neutrons and electrons, break those subatomic particles down to quarks, and finally break those quarks down to muons gluons bosons and other particles and eventually down to strings.
.NET is like Microsoft's Rails; the number 1 complaint I see about .NET devs is that they don't understand what's happening under the hood of their app. The dev environment removes you from the low-level code, but allows you to move extremely fast.
Not to start an argument, but I think that only applies to people who are in a hurry to get something done. I can't tell you the number of times you have to understand what's going on under the hood to make the application work in the web world. It's a totally different monster too. Pre/Post load? Pre page initialization? You need to know where to drop some of that information for it to serve the purpose intended.
Most of this is gone with MVC.NET and even then you need to know what you're doing.
I think what you're complaining about is not professional .NET developers, but people who do it on the side or as a hobby. Same complaints can be leveraged against a similar type of PHP dev.
Not to start an argument, but I think that only applies to people who are in a hurry to get something done. I can't tell you the number of times you have to understand what's going on under the hood to make the application work in the web world. It's a totally different monster too. Pre/Post load? Pre page initialization? You need to know where to drop some of that information for it to serve the purpose intended.
I mostly meant to refer to the frontend. This is more a generic problem with starting out on a framework though. Akin to a PHP dev starting with CakePHP rather than learning how those tools work.
That's actually 1 reason I'd caution against starting your programming career with Rails: you need to learn how a hammer & nail work before breaking out the power tools.
I think it is time for me to step into the fray on this one, thus some of it will be a rehash.
I do not do any web development anymore, you have to go back to when anglefire was free hosting before they turned into a dating website(webrings, lulz). I am now an alumni with a CS degree, which makes the comment about coders not knowing what an array is causes me to jump out of my seat and shout profanities.
It is fine to start learning the syntax of a language, how lines are written, items are created, and methods are called, but please don't start coding unless you can answer yes to these: Do you know what an array, matrix, vector, list, and linkedlist(trees) are? Do you know what !, ==, =, <, >, &&, || mean? Do you know what do/while, while, if, and for statements do(jump and break are handy SOMETIMES)? Do you know what a stack and a queue are? If you understand the concepts of computer science and know how to create steps to solve problems then languages are handy but mean less because they simply provide another solution to your problem instead of the ONE solution, syntax is really what make languages different because they all follow automata theory.
For languages I would tell you to look at PHP first then Javascript from anecdotal experiences with my web dev friends. I like java as a full language because java is java, I also think more like that language any other I have been exposed to. But just don't take our word if you want to learn. Look up different languages and solve the same problems with languages to see what feels more natural to you.
P.S. If you are trying to code something and are having issues someone has already written the general code solution and it is posted online. Writing the same tree sort 20 times is a waste, find one you like and save it or write your own and save it to use later as a template.
It's all valid stuff. That's the thing about programming. It's breaking down what you think is the simplest possible operation down farther into even simpler operations. You then go over those operations and simplify them even more.
You take a person, break them down into organs, break those organs down to tissues, break those tissues down to cells, break those cells down to proteins, break those proteins down to amino acids, break those amino acids down to molecules, break those molecules down to atoms, break those atoms down to protons neutrons and electrons, break those subatomic particles down to quarks, and finally break those quarks down to muons gluons bosons and other particles and eventually down to strings.
The nice part is that you can now have include files that basically allow you to say INCLUDE MICROSCOPIC and you're free to develop your own tissues and organs. People say 'well that's not real programming, you should do everything yourself' - that's bullshit, you're spending time on a problem that's already been solved for which there is no meaningful alternative (in b4 cyanide-based biochem) so don't waste your time reinventing the wheel and do something meaningful
Funny as hell. The girlfriend and I lol'd quite a bit at these ones
psuedocode exercises are hilarious, you know you've got the mind of a programmer the more fucked up the examples get... because that's what's going to happen in the real code if you don't approach a problem the correct way
Most of this is gone with MVC.NET and even then you need to know what you're doing.
I think what you're complaining about is not professional .NET developers, but people who do it on the side or as a hobby. Same complaints can be leveraged against a similar type of PHP dev.
I actually couldn't get going in MVC-style coding because I couldn't get my head around what it was doing for me
The nice part is that you can now have include files that basically allow you to say INCLUDE MICROSCOPIC and you're free to develop your own tissues and organs. People say 'well that's not real programming, you should do everything yourself' - that's bullshit, you're spending time on a problem that's already been solved for which there is no meaningful alternative (in b4 cyanide-based biochem) so don't waste your time reinventing the wheel and do something meaningful
Not saying he needs to learn how to write all the base functionality. You should, however understand the fundamentals, which means breaking down what you think is the smallest unit even farther.
This makes it easier for debugging when you INCLUDE einsteinGeneral and wonder why gravity.force() always evaluates to UNDEF.
0
Straight_ManGeeky, in my own wayNaples, FLIcrontian
edited June 2011
In the USA, http://w3.org (They not only have lists of code components,but also specific examples.) To play with code you need also some examples which you can play with right in Firefox's web development, which area of the program 4.0.2 is much improved in being able to parse and code accept for version 5 of HTML and backward.
It is fine to start learning the syntax of a language, how lines are written, items are created, and methods are called, but please don't start coding unless you can answer yes to these: Do you know what an array, matrix, vector, list, and linkedlist(trees) are? Do you know what !, ==, =, <, >, &&, || mean? Do you know what do/while, while, if, and for statements do(jump and break are handy SOMETIMES)? Do you know what a stack and a queue are? If you understand the concepts of computer science and know how to create steps to solve problems then languages are handy but mean less because they simply provide another solution to your problem instead of the ONE solution, syntax is really what make languages different because they all follow automata theory.
I appreciate what you're trying to say here, but I've found almost zero use for anything outside of basic arrays and/or lists in day-to-day programming tasks, especially with web development. Even when I've found things that required something a little more in-depth I've still found that I can usually solve it just using lists and arrays. Sure, it might be a bit slower in practice, but at this point very little you do requires optimization outside of specific use cases.
When it comes to data structures, knowing how Arrays and Lists (generic lists/dictionaries) work is about all you need to understand to be able to do some pretty nifty things.
If he's interested in learning just to broaden his horizons I think piling on much more than how the different control structures work is overkill at best.
I appreciate what you're trying to say here, but I've found almost zero use for anything outside of basic arrays and/or lists in day-to-day programming tasks, especially with web development. Even when I've found things that required something a little more in-depth I've still found that I can usually solve it just using lists and arrays. Sure, it might be a bit slower in practice, but at this point very little you do requires optimization outside of specific use cases.
The one piece of Java that I really miss is the vector data type, all of the best attributes of an array put together with all of the best attributes of a linked list, and you can stick any variety of objects into it... of course, it had higher overhead than either of the other structures, but it sure was fun to use.
A lot of great points have been covered about getting started, so I'll just add some additional thoughts about what I believe to be important once you know the basics of programming. If you plan on working with others as a programmer, then you've gone from programming to developing.
Software Development is typically concerned with more than "does this code work". Maintainability becomes a focus, other people will need to read, understand, use, and potentially modify or extend what you've written. This is when it becomes important that your code was designed in a sane way.
The following are a few guiding principles that I work by on a daily basis:
DRY (Don't Repeat Yourself)
If you find the same thing being done more than once then it should be consolidated and represented in one place. This applies to pretty much all scopes: methods, classes, and namespaces. Not only does this keep your codebase clean looking and less bloated, but reduces duplication. This is helpful because when it comes time to change something with that piece of logic it only has to be done in one place.
SRP (Single Responsibility Principle)
A unit of code should do only one thing and it should do it well. If something is trying to do many things it is a sign that it needs to be pulled apart. Additionally, adhering to this principle will aid significantly in testability. Testing (in particular unit testing) is good practice and should always be done where possible, look up Test Driven Design for more.
Naming as documentation
Many, many, many people will say "comment your code!". I personally feel this to be a waste of time. If you name your variables, methods, and classes clearly and concisely then there should be no need for additional documentation. Documentation in the form of comments tends to be forgotten and wrong more often than it is correct. If you are having difficulty naming something then it might be a sign that it is too complex and the code itself should consider being redesigned.
This basic set of principles will make your code much easier to maintain and your coworkers just might not hate you for everything you've written in the past.
I'd say that anyone doing coding should definitely adhere to the DRY / object-oriented fundamentals at the minimum, regardless of if they're going to work with others - it saves a lot of:
"What idiot did that?"
*looks up version so you can demand answers*
edit contributor: you
"Oh."
A lot of great points have been covered about getting started, so I'll just add some additional thoughts about what I believe to be important once you know the basics of programming. If you plan on working with others as a programmer, then you've gone from programming to developing.
Software Development is typically concerned with more than "does this code work". Maintainability becomes a focus, other people will need to read, understand, use, and potentially modify or extend what you've written. This is when it becomes important that your code was designed in a sane way.
The following are a few guiding principles that I work by on a daily basis:
DRY (Don't Repeat Yourself)
If you find the same thing being done more than once then it should be consolidated and represented in one place. This applies to pretty much all scopes: methods, classes, and namespaces. Not only does this keep your codebase clean looking and less bloated, but reduces duplication. This is helpful because when it comes time to change something with that piece of logic it only has to be done in one place.
SRP (Single Responsibility Principle)
A unit of code should do only one thing and it should do it well. If something is trying to do many things it is a sign that it needs to be pulled apart. Additionally, adhering to this principle will aid significantly in testability. Testing (in particular unit testing) is good practice and should always be done where possible, look up Test Driven Design for more.
Naming as documentation
Many, many, many people will say "comment your code!". I personally feel this to be a waste of time. If you name your variables, methods, and classes clearly and concisely then there should be no need for additional documentation. Documentation in the form of comments tends to be forgotten and wrong more often than it is correct. If you are having difficulty naming something then it might be a sign that it is too complex and the code itself should consider being redesigned.
This basic set of principles will make your code much easier to maintain and your coworkers just might not hate you for everything you've written in the past.
While I won't find any use in this post immediately, I like it. It's something I think I knew before reading the post but it would have been something that I would of looked over (consolidating code, that is). Also, when I use to use Actionscript with Flash, I tried to have one piece of code do as many things as possible so my end result would be a much shorter code. However, this didn't always work out as well as I intended. Thumbs up for this post. :thumbup
@PirateNinja said:
Python is awesome, if you are an engineer.
I wish I could time travel back to 2011 and give myself this advice. Still though, it's never too late because I'm at least passable at it now. As an aside, C++ pre-STL as a first language is like a mental inoculation against being disturbed by any kind of language weirdness you have to deal with later.
Absolutely no front-end language has the same usefulness and demand of Javascript. It's used everywhere from small personal projects to gigantic corporate applications, and it's only rising in popularity and demand. On top of that, Javascript is an incredibly good basis to branch into many other languages with its solid core concepts.
Here's a an estimate of demand based on a list compiled from Dice (database of current computer programmer jobs) data: http://www.codingdojo.com/blog/8-most-in-demand-programming-languages-of-2015. (The curious lack of PHP is suspect, so I rechecked all their data, and it's accurate except PHP sits between C++ and Ruby on Rails).
Comments
this is the fun in coding
Remember, computers don't assume anything. You literally have to tell it to assume the laws of math exist so you can get a result when you tell it to add 2 numbers, etc. (done for you in many coding languages, but still)
Python is a better designed language for data manipulation across many mediums. Google uses it because it allows them to create APIs for things like Maps than can be accessed in lots of different ways.
Ruby on Rails stresses convention over configuration and extremely strong coding standards & design patterns. I recommend using this one if you want to have a future in Internet startups / move to Silicon Valley one day. It will also force you to learn good coding practices, but will probably be more difficult up front.
.NET is like Microsoft's Rails; the number 1 complaint I see about .NET devs is that they don't understand what's happening under the hood of their app. The dev environment removes you from the low-level code, but allows you to move extremely fast. Personally I put this option dead last as I hate being beholden to MS's whims.
Javascript is mission-critical to learn regardless of what backend language you use - and Javascript is becoming a viable backend language with systems like Node.js.
It's all valid stuff. That's the thing about programming. It's breaking down what you think is the simplest possible operation down farther into even simpler operations. You then go over those operations and simplify them even more.
You take a person, break them down into organs, break those organs down to tissues, break those tissues down to cells, break those cells down to proteins, break those proteins down to amino acids, break those amino acids down to molecules, break those molecules down to atoms, break those atoms down to protons neutrons and electrons, break those subatomic particles down to quarks, and finally break those quarks down to muons gluons bosons and other particles and eventually down to strings.
Funny as hell. The girlfriend and I lol'd quite a bit at these ones
Not to start an argument, but I think that only applies to people who are in a hurry to get something done. I can't tell you the number of times you have to understand what's going on under the hood to make the application work in the web world. It's a totally different monster too. Pre/Post load? Pre page initialization? You need to know where to drop some of that information for it to serve the purpose intended.
Most of this is gone with MVC.NET and even then you need to know what you're doing.
I think what you're complaining about is not professional .NET developers, but people who do it on the side or as a hobby. Same complaints can be leveraged against a similar type of PHP dev.
That's actually 1 reason I'd caution against starting your programming career with Rails: you need to learn how a hammer & nail work before breaking out the power tools.
I do not do any web development anymore, you have to go back to when anglefire was free hosting before they turned into a dating website(webrings, lulz). I am now an alumni with a CS degree, which makes the comment about coders not knowing what an array is causes me to jump out of my seat and shout profanities.
It is fine to start learning the syntax of a language, how lines are written, items are created, and methods are called, but please don't start coding unless you can answer yes to these: Do you know what an array, matrix, vector, list, and linkedlist(trees) are? Do you know what !, ==, =, <, >, &&, || mean? Do you know what do/while, while, if, and for statements do(jump and break are handy SOMETIMES)? Do you know what a stack and a queue are? If you understand the concepts of computer science and know how to create steps to solve problems then languages are handy but mean less because they simply provide another solution to your problem instead of the ONE solution, syntax is really what make languages different because they all follow automata theory.
For languages I would tell you to look at PHP first then Javascript from anecdotal experiences with my web dev friends. I like java as a full language because java is java, I also think more like that language any other I have been exposed to. But just don't take our word if you want to learn. Look up different languages and solve the same problems with languages to see what feels more natural to you.
P.S. If you are trying to code something and are having issues someone has already written the general code solution and it is posted online. Writing the same tree sort 20 times is a waste, find one you like and save it or write your own and save it to use later as a template.
The nice part is that you can now have include files that basically allow you to say INCLUDE MICROSCOPIC and you're free to develop your own tissues and organs. People say 'well that's not real programming, you should do everything yourself' - that's bullshit, you're spending time on a problem that's already been solved for which there is no meaningful alternative (in b4 cyanide-based biochem) so don't waste your time reinventing the wheel and do something meaningful
psuedocode exercises are hilarious, you know you've got the mind of a programmer the more fucked up the examples get... because that's what's going to happen in the real code if you don't approach a problem the correct way
I actually couldn't get going in MVC-style coding because I couldn't get my head around what it was doing for me
Amen. It's still interesting to read everything thought.
Not saying he needs to learn how to write all the base functionality. You should, however understand the fundamentals, which means breaking down what you think is the smallest unit even farther.
This makes it easier for debugging when you INCLUDE einsteinGeneral and wonder why gravity.force() always evaluates to UNDEF.
I appreciate what you're trying to say here, but I've found almost zero use for anything outside of basic arrays and/or lists in day-to-day programming tasks, especially with web development. Even when I've found things that required something a little more in-depth I've still found that I can usually solve it just using lists and arrays. Sure, it might be a bit slower in practice, but at this point very little you do requires optimization outside of specific use cases.
When it comes to data structures, knowing how Arrays and Lists (generic lists/dictionaries) work is about all you need to understand to be able to do some pretty nifty things.
If he's interested in learning just to broaden his horizons I think piling on much more than how the different control structures work is overkill at best.
The only other thing I recall being so difficult to grok was version control with git, with the same outcome: I will never develop without git again.
*coughMercurialandorBazaarcough*
The funny thing is, the OSI model was presented to us in like week 1 of the CS program at Georgia Tech, but YEAR 3 at UC.
They are all arrays and list.
They didn't care about really teaching OSI to us.
Software Development is typically concerned with more than "does this code work". Maintainability becomes a focus, other people will need to read, understand, use, and potentially modify or extend what you've written. This is when it becomes important that your code was designed in a sane way.
The following are a few guiding principles that I work by on a daily basis:
DRY (Don't Repeat Yourself)
If you find the same thing being done more than once then it should be consolidated and represented in one place. This applies to pretty much all scopes: methods, classes, and namespaces. Not only does this keep your codebase clean looking and less bloated, but reduces duplication. This is helpful because when it comes time to change something with that piece of logic it only has to be done in one place.
SRP (Single Responsibility Principle)
A unit of code should do only one thing and it should do it well. If something is trying to do many things it is a sign that it needs to be pulled apart. Additionally, adhering to this principle will aid significantly in testability. Testing (in particular unit testing) is good practice and should always be done where possible, look up Test Driven Design for more.
Naming as documentation
Many, many, many people will say "comment your code!". I personally feel this to be a waste of time. If you name your variables, methods, and classes clearly and concisely then there should be no need for additional documentation. Documentation in the form of comments tends to be forgotten and wrong more often than it is correct. If you are having difficulty naming something then it might be a sign that it is too complex and the code itself should consider being redesigned.
This basic set of principles will make your code much easier to maintain and your coworkers just might not hate you for everything you've written in the past.
"What idiot did that?"
*looks up version so you can demand answers*
edit contributor: you
"Oh."
While I won't find any use in this post immediately, I like it. It's something I think I knew before reading the post but it would have been something that I would of looked over (consolidating code, that is). Also, when I use to use Actionscript with Flash, I tried to have one piece of code do as many things as possible so my end result would be a much shorter code. However, this didn't always work out as well as I intended. Thumbs up for this post. :thumbup
Just stumbled on this thread doing some research. 2011 @Annes knew her shit, props.
I wish I could time travel back to 2011 and give myself this advice. Still though, it's never too late because I'm at least passable at it now. As an aside, C++ pre-STL as a first language is like a mental inoculation against being disturbed by any kind of language weirdness you have to deal with later.
Absolutely no front-end language has the same usefulness and demand of Javascript. It's used everywhere from small personal projects to gigantic corporate applications, and it's only rising in popularity and demand. On top of that, Javascript is an incredibly good basis to branch into many other languages with its solid core concepts.
Here's a an estimate of demand based on a list compiled from Dice (database of current computer programmer jobs) data: http://www.codingdojo.com/blog/8-most-in-demand-programming-languages-of-2015. (The curious lack of PHP is suspect, so I rechecked all their data, and it's accurate except PHP sits between C++ and Ruby on Rails).