How Should a Non-Techie Learn Programming?
CurtMonash writes "Nontechnical people — for example marketers or small business owners — increasingly get the feeling they should know more about technology. And they're right. If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family. But how should they get started? I started a thread with the question on DBMS2, and some consistent themes emerged, including: Learn HTML + CSS early on; Learn a bit of SQL, but you needn't make that your focus; Have your first real programming language be one of the modern ones, such as PHP or Python; MySQL is a good vehicle to learn SQL; It's a great idea to start with a project you actually want to accomplish, and that can be done by modifying a starter set of sample code (e.g., a WordPress blog); Microsoft's technology stack is an interesting alternative to some of the other technology ideas. A variety of books and websites were suggested, most notably MIT's Scratch. But, frankly, it would really help to get more suggestions for sites and books that help one get started with HTML/CSS, or with MySQL, or with PHP. And so, techie studs and studdettes, I ask you — how should a non-techie go about learning some basic technological skills?"
Once you clarify that, then you can look at the range or software and hardware solutions, which could include some programming.
I wouldn't start with database stuff until you have a programming language or two mastered, but when you do learn one, learn PostgreSQL. MySQL's SQL flavour is messed up and because their parser doesn't handle relational calculus well, you're stuck with a language that's unusuable for much of SQL without syntactic contortions.
I wouldn't start with web stuff either - you want a classic programming background (which will be a bit depth-first) to see if you can handle it. If you can't, you probably should find another hobby - the world is full of bad code written by people who don't know what they're doing.
For every problem, there is at least one solution that is simple, neat, and wrong.
In my opinion, as someone who's learned a few programming languages in his lifetime, the best way to learn a programming language (or any new technique, really) is to pick a task for yourself using that technique and figure out what you need to do to get that task done. For instance, I learned Javascript primarily because I wanted to query a couple of Sharepoint sites and display the resulting information somewhere else, and Javascript was as reasonable way of doing that as any. I learned Perl because I had a bunch of information in XML files, and I wanted to apply an XSLT transformation to all of them and concatenate the result together (that's also how I started learning XLST). I learned Java Applets because I was bored in a high school computer science class, and decided to make a 2D gravity simulation thing. I learned C++ because my dad had written his own custom version of tcpreplay, and offered me $20 to port it to Windows.
Just pick something that sounds like fun, figure out how to do it in the language of your choice, and do it.
No, really... They shouldn't. Programming is a way of thinking, computer science even more so and if you haven't got that way of thinking, you shouldn't touch it. I'm really sorry. My wife doesn't understand a thing I do professionally (but it brings in the bucks, so we can eat) and I tried explaining. It just isn't her world and even the basic maths behind it are beyond her. Of course, I don't understand a thing about art, which is her thing.
This is akin to the question "I have $YOUNG_FAMILY_MEMBER who likes to game, how do I get him/her programming." You don't... Unless they show real interest it's a waste of time.
Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
Agreed. The asker seems to be looking for some silver bullet there really is none. Ultimately it dies not matter what language you use or what paradigm you subscribe to. The only thing that will make you proficient is practice.
Maybe the best option is to take an introductory programming course at a community collage and see if you like it?
"Maybe this world is another planet's hell"
Aldous Huxley
Small business want to save money by making websites on their own... unfortunately they don't have the know how nor the time to do it. Rather than learning to program, i would suggest learn to spot the technical BS. It is far better to pay a professional firm that does design and site programming since they are less likely to open some blatant security holes to the world. Knowing how to program does not equal knowing how to program well. When your livelihood is on the line, spending couple hundred bucks is much cheaper than having your business go under because the site you wrote over the weekend got hacked by some automated drone and all your client info were stolen.
Where is the "Ignorant" mod tag?
They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.
I have found that far and away the most important thing that my Computer Science program at University has required of me is that I learn Unix. Both of the scripting languages that you mention (PHP and Python) are, in a sense, descended Bash/Shell, and you will find that most of what you will be doing with them is automating procedures that could otherwise (though less practically) be accomplished via command-line utilities like cat, sed, grep, wget/cUrl, etc. The internet is essentially built up around Unix paradigms (those "/"s in URLs: the Unix directory separator, and full URL paths are generally representative of the contents of an actual subdirectory -- the web root -- on the server. I'm sure I'm telling most slashdotters something that they have known since their early teens, but the question is being asked by a beginner), so knowing how to work a Unix (or Posix) OS like any one of the major Linux distributions will be invaluable for you and, I would say, should be your starting point.
Writing "I want to be a programmer" is like saying "I want to be a doctor!". There are a million different sub-fields, from orthopedics (EG: fixing borken bones) to orthodontics (fixing teeth) and there's a million details to know for each field.
Programming is a big, big field and covers everything from hacking firmware in assembler to writing SQL queries to using macros in Excel. Laugh all you want to, but the lowly Excel macro quite literally runs Billion-dollar enterprises, and is legitimately a programming art, just as much as assembler or kernel coders in that it gets the job that's needed, done.
Start with finding out what you are trying to accomplish, and then work from there! My goal was to build and sell information management tools, and for me, PHP and SQL seemed like good tools for the job. They haven't disappointed me, for my focus, but then, I'm not trying to build a 3D FPS, either!
Then, get the right tool for the job, and roll with it.
I have no problem with your religion until you decide it's reason to deprive others of the truth.
This seems to be the basic content of ~80% of replies in this thread. Acknowledging the danger of being accused of fanboi/hater-ism, I simply don't get what makes PHP good for beginners. All criteria you've mentioned are true for all modern web stacks. Let's take python for instance (even though I think ruby is in fact easier for beginners, it seems Slashdot is a ruby-hostile crowd) - hosting, check - well documented (disagree that PHP is but ok...), check - error messages (the fact that there even *is* a crazy hebrew one in PHP makes this laughable but ok...), check - immediate reward and feedback when you refresh a page, check - real world uses, check - natural learning curved towards better/more advanced programming, check times a bunch over PHP. It is also far more readable and consistent, does not encourage shoot-yourself-in-the-foot-isms to the extent of PHP, has generally better libraries, a very similar scalability and performance story, and equivalent if not better frameworks surrounding it. So I ask - what actually makes PHP better for beginners? Is it just because we all began our web programming in PHP so we think that's the right way, or does it actually have redeeming points? Now, Drupal and Wordpress are a couple of the most excellent and hit-the-ground-runningest of the world's myriad content management systems, so if that's what we're talking about then yes, by all means, use one of those to spin up an easily extensible site or blog very quickly and bring PHP along for the ride, but I see no reason to start from *scratch* with PHP. (Not meaning to flame, though it comes off that way - I'm very curious what you (or anyone else) believe makes PHP easy for beginners.)
I've been programming for 25 years.
Here's what you'll get. You will learn language A, become proficient in it, get a job using it and then eventually get laid off.
When you look for work, you'll find that Language A is no longer the "in thing". They want people that know language B, which was introduced 5 years ago.
The H.R. people will want only candidates that have 7 years experience in language B.
Then you'll learn B, but someone will come up with B#, B-, B++, B--, all basically the same thing, but with just enough differences that they can copyright it and irritate the hell out of you when trying to figure out where to put the semi-colon
The H.R. people won't accept experience in the B(variation) that you know, only the B(variation) that they want.
And then you'll have to deal with language bigots. You know B(variation) but not D? Well then, you are one or more of:
a) not as productive
b) not a "real" programmer"
c) you write buggy code.
Then the E bigots will dump on the D bigots while the database language "Seroquel" (many programmers know what this is are are probably taking it) bigots watch with amused expressions because they know only their language is a "real" language.
It gets worse.
At some point they will change the entire paradigm of application development to a new one where you have less control over how it looks, works differently depending on the user's browser preference and requires giant servers. Sure, you don't have to deal with Installers, but at the cost of submitting your program to the whims of the server, the network and the user's preference of browsers.
Oh...and H.R. now wants:
10+ years work experience as a Technical Lead working with the following languages, tools, and methodologies:
* Technical lead role
* Agile development
* Project management
* Implementing Microsoft technologies
* Web architecture design and implementation
* High volume system architecture design
* Hardware and software load balancing technologies
* Data replication / ETL technologies
* Multithreading, socket programming, distributed transaction processing
* System stress testing / performance testing framework
* Business process / rules modeling
* Business Intelligence tools
Responsibilities
* Lead technical teams in designing and prototyping technical solutions
* Create implementation proposals
* Review technical designs, code, test plans
* Create well-designed, reusable objects
* Create and execute project work plans for the technical team, revising as necessary to meet changing needs and requirements.
* Communicate and enforce best practice coding standards.
* Consistently deliver high-quality products and services to clients on schedule.
* Communicate difficult/sensitive information appropriately.
* Communicate with customers technical concepts in easy to understand language.
* Communicate effectively with stakeholders to identify needs and evaluate alternative business solutions with project management.
* Develop an understanding of clients' business and suggest effective programming solutions.
Personal Attributes
* Creativity and strong attention to detail
* Ability to work effectively on tight deadlines as necessary
* Effective oral and written communication skills
* Exceptional customer service skills, including the ability to interact professionally with a diverse group of customers
* Desire to learn new skills and improve
Required Skills:
* Experience as Technical Project Lead, Architect, Lead Developer or other position of major responsibility on mission critical software projects
* C#, ASP.NET, VB.NET,C++, C, and/or JavaScript
* Relational databases: DB2, MS SQL Server, and/or Oracle
* Experience designing and coding superior technical solutions, creating and executing well designed and reusable objects, efficient and logical databases for clients, project work plans, revising as necessary to meet changing needs and requir
When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
I can't help but notice that if you take the Microsoft-related technologies from the requirement list it starts to look adequate.
I've only been in the programming game for a decade but I don't suffer from that. Why?
I never did program in anything fashionable or new. The language I use for 99% of the serious stuff is C, there are always loads of jobs in it for someone with a few years experience, and it was designed in the late 60s/early 70s so it seems to me it's unlikely to just up and die any time soon.
I'm not trying to get into a 'which language is best' flamewar here, but from a career perspective I've done very nicely out of it. I do learn bits and pieces of other stuff as needed, but having C as a base ensures I'm never out of date (or perhaps I'm always out of date :)