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?"
Learn Drupal. PHP + MySQL + HTML + CSS + JS
Once a day for five days for a year they should practice with the programming language of their choice.
There is no magic bullet, you're not going to learn Java or Python in 20 days with those dunderheaded, oversized volumes.
Just work at it and you'll get better.
Also: http://norvig.com/21-days.html
Once you clarify that, then you can look at the range or software and hardware solutions, which could include some programming.
Give someone a program, frustrate them for a day. Teach someone to program, frustrate them for a lifetime.
If the nontechie wants to make a webpage or if the nontechie wants to interface with hardware, then the choice of languages and knowledge differ markedly.
QuakeC.
Install Quake, get Progs106.zip and FrikQCC then go nuts making Quake into something that's not Quake. You'll learn a lot of fundamentals from the trial and error alone!
Hey, it's how the greats started.
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.
Honestly some of the best help online is online follow along Examples by tech experts who want to build a name for themselves. Couple that with the forums that get indexed rather highly and you can read up on a discussion about what you need to do.
I can't name anything specific because it all depends on the rankings this month. But self teaching yourself is as easy as entering "[what you want to do] Tutorial"
If anything confuses you in the tutorial, such as terminology, Google that! Need help setting up a compiler, Google that!
Though I probably shouldn't be plugging Google like that, I think any search engine will do.
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)
Funny you should ask...
I was just watching a video or 7 at the Khan Academy, and I was saying to myself "Wow, it would be so easy for me to make 10 minute lectures about one of my chosen programming language!". As a collective, we could probably simplify all sorts of compsci information!
Other than that, I know a few colleges have free courses online. Like the MIT free course material. I'm sure someone more informed here could provide you with some top-notch links.
The real money isn't in coding, it's the ideas. Just think of an idea and hire someone to code it for you.
Why not stick to whaterver you are doing? I have no need to learn how to be an amateur accountant, because I am a professional programmer. If you are a "non-techie", be the best "non-techie" you can be and leave the technical stuff to the "techies". You will save yourself frustration and the money you will have to pay a professional to fix it later.
http://www.alice.org/
To make fancy webpages, or the general art of programming?
If it's the former, grab one of the 5000000 PHP+mysql books and go to town on it.
If it's the latter, then you have your work set out for you. I'd suggest The Art of Programming but mostly I use it to scare people off. In reality you'll want some kind of quick overview of different programming paradigms (procedural, functional, object-oriented) and the various ways different languages achieve those paradigms (for instance, Java's class-based OO vs JavaScript's prototype-based OO) Then once you've decided what buzzwords you wish to comply with, locate books explaining how to develop buzzword compliant software.
I like the suggestion to use PHP, it's perhaps the closest we have to oldfashioned BASIC. You hardly need anything to get started, apart from web hosting, an FTP client and Notepad. The language is well documented, its error messages are often helpful (except for that crazy hebrew one), and you get immediate reward and feedback when you refresh the page. It also has real world uses. Programming goes naturally from there, if you're curious and stick with it.
What you are describing is not programming; it's web design and database administration. They may contain elements of programming, and they're both (typically) done on computers, but they're generally regarded as separate skill sets these days.
https://www.eff.org/https-everywhere
How to start programming in PHP:
Step 1: remove half your brain
Step 2: enjoy how clearly documented the standard library now seems
For .Net, the instructions are similar, but you take out the other half too.
You might start with something like Scratch to learn the concepts.
Then I'd dive into PHP or Python. PHP is good because you feel like you are really doing something since it shows up on the web. Python on the other hand produces faster programs and has a very clean syntax. HTML, Javascript, and CSS are good if you're learning PHP anyway but do yourself a favor and avoid mixing HTML, CSS, Javascript, SQL, and PHP together. Learn to separate your code right from the start. SQL is always useful to know and has the benefit of a different prospective on coding. Likewise I suggest learning LISP and Prolog as they'll widen your horizon and can give you some powerful tools that many programmers don't have.
Eventually you might want to look into C, C++, Objective C, Assembler, Postscript, and shell scripting to round out your experience. Also you want to read some books on data structures, algorithms, and design patterns. Knowing how to write code doesn't make you a programmer anymore than speaking English makes you a brilliant author.
At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
Pardon me while I throw up into my mouth.
It really depends on what exactly you want to do and what you have. Apple's automator will be good to learn some things. Those Lego kits are a great way to combine programming with real world results and not just get on screen results. Dylan is an easy language. Scheme is more to teach language theory. Lisp is a diiferent way to think of things. C is the great-granddaddy of the other major family of langaues and need-to-know if one gets into programming. Later major languaes will be a hybrid of ideas between these two language families. There are lesser used languages that try different ideas.
But, what is the end-goal? The summary mentions a lot about web design and HTML but then says that's from and earlier thread. Programming won't teach you about web design (not much anyway). Web design only dabbles a bit in programming if it's limited to HTML/CSS. SQL is another thing (databases). And "learning technology" can range from learning to navigate your basic desktop to making spreadsheets to designing simulations in C, etc.
It's hard to get candy here without a pinata to hit.
A: The same way as a techie. Long answer: Learn C, Haskell, Scheme, or whatever suits your needs by writing a lot of small to mid-sized programs. Learn about data structures and how they are internally represented on your machine. Sit down and actually do something instead of messing around with drag & drop RAD tools. That's how you learn it. (In my opinion, at least.)
I've been working in programming for over a decade and haven't had to deal with CSS or database work at all. The last website stuff I did from scratch was pure HTML. Arguably this isn't great from a generalization point of view, but I've got most of a decade of experience with low-level linux kernel and application coding, high performance networking, high reliability system design, etc.
As others have said...the place to start depends totally on what they want to accomplish. I started out as a kid typing in simple games in BASIC from a magazine, then debugging them trying to find the typos when they didn't work right away. Now maybe it might make sense to create a simple iPhone app (or the equivalent for whatever other phone one may own).
These are sometimes called application specific systems (or in the old days 4th generation languages). The toolkit provides a lot of useful pieces like data types, input and output, pre-programmed routines. You then connect the dots. For example a spreadsheet is a table-oriented formula translator. Simple table operations are pretty easy to program. But you can get arbitrary hairy with all the extras they supply. At some point Excel programming would become too obtuse. Then you would drop out of such a system into a more general programming system.
Mathematica or Mathlab is another example. They are oriented into translating mathlike formulas into other formulas. Then inserting ranges of numbers and obtain graphical outputs.
Start with what a lot of old pharts did, buy a cheap Apple II from fleabay and start coding in Applesoft BASIC... (Commie64 is for 1053r5)
Pick a project, do it to your satisfactions, and then post it for others to review & give feedback.
Learning from constructive criticism is a big part of learning programming.
Car analogy alert: Why should a non-mechanic driver learn the basics of internal combustion and what the spark plug thingie does?
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?
Database programming is the most boring shit ever. If you take a newbie and introduce him or her right away to database programming, he/she will probably decide that it's not worth the trouble to learn.
Start with something simple and straightforward -- learning basic imperative-paradigm programming with a language like Python (but s/Python/$language/). Creating programs that do cool things all by yourself is MUCH more fun and empowering than using someone else's database software to look up records from someone else's database. Once the non-techie has learned that, you can move on to discussing databases or HTML/CSS or whatever. But for goodness' sake, don't start with them.
Should a non-physician learn medicine and practice it? Should a non-lawyer represent themselves in court? Both happen with disastrous results.
If you need an application for your business, hire one of the thousands of good freelance software engineers out there and get a solid, well-build application. Save yourself the time and trouble of learning "programming" and stick to whatever it is you are good at doing. Leave the development to people who make it *their* business to understand the intricacies of software security, language nuances, database design, software testing, design patters, accessibility, user interface guidelines, etc...
_pax74
Why not look at a language like, say, AWK? Really basic, great for creating useful filter programs, and fairly widespread.
Palm trees and 8
Couple points:
1. You have to get your mind in the 'programming' mindset. Learning programming isn't necessarily purely about being a techie. You need to have solid logic skills. Much of programming is spent just getting logic right. Check out Boolean Logic for an launch point. The knowledge you gain from briefing this area will carryover into many, many programming languages. Programming *is* logic.
2. Learn what you want to program for. Pick a startup project. Is it a website you want to make? HTML & CSS is very different than learning C or C++, likewise, SQL is very different than assembly. Not that certain concepts don't carry over, but much of being a jack of all trades is simply having the ability to have good conditional logic skills, and the ability to Google things quickly and learn to apply them as you go. You don't have to become a master of all languages, or hell, even one language, but if you are truly *interested* (thats the keyword, if your not interested, its just not going to happen), and you have done a little programming in a couple of simple languages, then you will be in a good position to progress to more difficult projects.
3. Learn what you want to program for. Again. Repeated point. There are hundreds of programming languages, platforms, architectures, styles, libraries, etc. Pick something you are interested in, read about it a little bit, and if it looks like the learning curve isn't too ridiculous, start there. Perhaps a simple text based JavaScript browser game. At the end of the day you will know a bit of CSS, HTML, and JavaScript if you put your mind to it. But thats just one example.
4. W3C. This website is a good starting point for all things web.
5. Chrome Experiments If you really like web, check out the future of browser bling. Heavy JavaScript and HTML5
6. Databases. Not the most mentally entertaining, but you will need the knowhow to connect, select, insert, update, and delete data if you are doing anything with data. I am a Microsoft guy, and I can tell you that the Express Editions of Visual Studio are a greating starting point for a newbie, at zero price-point, and bundled with SQL Express, thats a good place to begin.
7. Also, places like CodeProject, StackOverflow, and CodePlex are great tools for questions ranging from the most basic to the most advanced of topics, and downloading sample code and live projects for tinkering around with.
'We are trying to prove ourselves wrong as quickly as possible, because only in that way can we find progress.' RPF
The way a lot of techies learn it is to take a programing course in junior high school or high school. Then they may go off on their own and develop these skills further.
I've seen the same kind of courses offered at community colleges. Some techies like myself can read an instruction manual and just do it. Other people prefer the structure of a taught course.
Very good point. I contest the claim that "If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family. " IMO its more likely to just be a black hole of time and resources.
With my apprentice, I told him with no preparation to create something in Quartz Composer (a graphical programming interface for OSX) that is hard, but within its capabilities. I then would answer any 'how do I' questions in algorithmic terms, as opposed to making a solution for them. If he gets frustrated, I explain with diagrams and further detail, and might create an example - though I will not let him take away reference implementations himself. This has the benefit of him learning how to solve problems, get aid, and convert algorithms and specifications to an implementation to get a result.
After those foundations in place, it's simple enough to replace graphical blocks with known blocks of code to duplicate their functionality, until the blocks and instructions get smaller, and smaller, and smaller - until you're at PHP, C, or Assembly level... depends how far you want to go.
They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.
I had to teach people how to make websites for about 5 years and the one thing I always suggested was to view the source on a webpage.
.. find a code sample site and take a look..
just find a word on the webpage near the thing you want to examine and view source then search for that word... but today you can install a plugin in FireFox like firebug and see more details.
As for php its the same deal
That will get you interested especially if you like puzzles but then you need to take a weekend and browse a how to code php in 24hrs book just so you can understand things a little better...
After that when you see a function just google it and you are likely to get an explanation....
And if you want to see how the pros do it find an open source project that has a few years under it's belt and really take a look at how code is structured.
I wrote a blog post about this! (for a previous employer)
Here, catch: http://www.webitects.com/blog/posts/14
Simply put, while programming is not horribly difficult, doing it well enough for larger works still is a specialist task, and well, the actual works are more often than not taking hours and hours of full-time work plus overtime to get done.
Ergo, I think it mentally at least takes you to consider yourself a "hobbyist" and to have an actual, quite pressing purpose why you're doing it. It does take some dogged persistence to get anywhere, sort of like when you learn a foreign language - at least for the first programming language.
That being said, a six year old kid can learn a real lot about software development if its interested. You can, too, if you care enough. But, I would not even try to specifically pick one of the "easy" languages. Pick the a popular one, you will have plenty of reading material and plenty of people to ask for help if you do that...
Assembly, no question about it.
Just run program called "debug" in windows, and off you go.
Excel almost feels like writing a mini program in one cell. One cell can have several if conditions and check multiple conditions and return a result.
This will teach them logic and how to assess data and get out of it what they want.
Then as they get more comfortable and then realize they are doing the same stuff in excel over and over, they can branch out into vba.
And for learning it, they can record macros and see how functional (albeit bloated) code works and modify it to their liking. Tell me another environment that will write functional code for you! Then once they have that foundation they can learn how to communicate with other apps like access. From there, learn sql and expand your vba in that area.
Then they can learn vb.net or full blown sql with other languages to write a web frontend.
Yes it's microsoft and they're evil, but its a development environment that most businesses aren't even aware that they have.
I continually wow workers with what I do in excel. The amount of time people waste doing reports and inputting data that could be automated or setup in a database.
And yes, access sucks in many ways, but this is still a great path to learn and it will definitely provide a benefit in many businesses.
Simple, use javascript.
It requires very little in terms of setup -- all you have to do is get a good text editor, like Notepad2, and write a .html file. Feedback to how your code works is as instant as hitting the F5 key in a browser.
There's a lot to with getting started with programming that has to do with barriers to entry. Having to set up a development environment, deal with compiler errors and such, and not getting instant and familiar feedback is quite a barrier.
If you know HTML and CSS, you should have a lot of fun with it. Grab jQuery, too -- it's easy to do amazing things very simply with it, and you'll learn a lot about OOP along the way just using it.
You'll be able to use it very nicely in the future. Once you want to do something else, however soon that is, move onto that with what you've learned.
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.
Because they can?
"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."
If you are running a small business, marketing, and supporting a family -- then at this point you don't remotely have the time to learn programming from the ground up. (All of HTML, CSS, SQL/MySQL, PHP/Python on a business-critical project?)
Learning programming to that extent takes several years of alone time.
We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
Why should a non-medic learn CPR?
It's like asking: How can I learn to be a ( surgeon, lawyer ) in a few days? After all, I can carve a turkey already and I've watched every season of "LA Law".
Programming may seem easy-- after all, it's just typing, right?
Well, surprise, surprise, it's a lot harder than those "[Language X] For Dummies" books let on.
In fact some of us went to school for 4 years and just learned the basics. Maybe after another ten years you get good at it. No shortcuts.
I'd say start with something practical that builds on knowledge you may already have. For instance, many people use Excel in their day to day lives... I'd start with the vbscript macros to do simple tasks to make your data more useful.
....but the "non-technical" person that starts with this type of mindset, I suspect, won't get too far. Learning anything complex and new requires enduring efforts and a strong will, plus a certain degree of intellectual curiosity, and a sense of purpose.
"Let's start learning something about X", especially if X is as broad as "technology" is too generic an intention, to fit what above.
It reminds me of man who goes at the library and says: "I have decided to get an education. Which books will get me educated?"
"Whenever people agree with me I always feel I must be wrong." (Oscar Wilde)
But if you must try, start with something simple and solve a particular problem. Don't listen to people who espouse one language versus another. They are idiots and will never be helpful. You might try http://www.processing.org./ It is a well defined environment with a simple editor and tools and will let you do some really fun and interesting things. A lot of artist use it for various projects.
If you don't pretend that you know how to code, then I won't pretend that I know how to run a business. Deal?
Odds are you'll never have enough time to learn programming at the depth that someone who is very good at it knows it.
Start small. Learn how to write a static web page using nothing but Notepad in Windows. Then, when you've mastered that, try using CSS to change the way it looks.
At this point, you can get into Javascript, which is a fantastic language for learning. Try to make something on the web page change when you mouse over it. Experiment with changing text fields in Javascript.
Then, write a simple "desktop" calculator as a web page.
This will likely take you a few months or weeks if you spend a lot of time at it. Remember, use Notepad only. Don't worry about making it work in anything but Internet Explorer (or your browser of choice) because that will make you insane.
When you can write Tetris, then you're ready to work with databases and servers.
Don't use MySQL, it's an abomination. If you have Microsoft Access, start with that. Make a project in that that real people will use. If maintaining it becomes difficult, it's because you don't know enough database theory. Figure out on your own why you want data to be fully normalized and only flattened with many saved SELECT queries. Try to figure out how to write the queries in SQL using the (excellent) query editor. Write UNION queries.
Now you're ready for a server and web site.
If moderation could change anything, it would be illegal.
I advise non-techies to not learn programming. Unlike most slashdotters, I don't see programming as a useful tool that everyone should learn, I think of it more as being a doctor than a mechanic. Sure, it'd be nice if everyone could program well, but the bottom line is most people don't have the knack for programming that techies do. As such, if they learn to program, they'll do it poorly (likely) as they lack the passion techies have.
How many times have you guys had to clean up code after a beginner, idiot, or non-techie? Be honest.
Food for thought,
(first time poster, long time reader)
In watercraft, there are two sides to the tree: watercraft where buoyancy is independent of orientation (e.g. Zodiac) and watercraft where orientation is everything. In the second group, you have canoes/kayaks with great initial stability and terrible final stability, and you also have the converse. For propulsion, you have gas eating outboards, propulsion by environmental agents, and self propulsion. And you have a choice between artificial materials and natural materials.
C is instructive if you stay close to the shoreline. LISP is a kayak. You can roll over and come up the other side. Some people like that. Python is a reasonably nimble rowboat with room for a picnic cooler. PHP is a powerboat with an onboard mini-bar in a deadhead lagoon. Java is a twin Zodiac catamaran. Never sinks in the water, but watch out for the trees. C++ is a canoe with two gun decks and side mounted chainsaws (sorry, Bjarne). Name your pleasure.
I'm partial to the wood-canvas Chestnut Prospector, paddling solo in a sheltered bay. The one thing an amateur absolutely needs to avoid is going bow up against a cross-wind.
A language is easy to learn: you only need to know how to loop, how to branch, how to define/make/call a function, an object and its methods and you are basically set.
What's less easy is the API: what are the tools, objects, functions, collections, IOs, whatever readily available to you with that language and does it cover what you are interested in. The difficulty here is that it's usually big, so at first it takes a while to find where is what you need.
Anyway that's not the issue here. First you have to think right. For this you should learn algorithmic (ie: http://en.wikipedia.org/wiki/Algorithmic ).
Then only you can pick a language. Take one with garbage collection: Visual Basic, Java, C# and avoid scripting languages.
When you will feel comfortable with one language the other ones should only require a minor effort.
Irrelevant news and morons using moderation to mod down what they disagree on. 2018 resolution: so long.
A great place to start learning HTML, CSS, SQL, PHP, etc is www.w3schools.com It is where I point my coworkers when they need to dip their toes into new languages.
Unless you decide to do it full time, anything that you develop that actually sees production will eventually need to be rewritten by someone else. If you're OK with that, go for it.
If you're serious about learning how to program, start with a strongly-typed language. Microsoft's Visual Studio has a wonderful (and possibly the best) integrated development environment. I recommend VB.Net, which you can get for free.
Visit your local Barnes and Noble. Find books on the programming language of your choice. Buy them. And instead of leaving them lying around - READ them.
Get your hands on a compiler for the language of your choice, try out the examples in those books (DO NOT use the included CD's, that's the lazy man's way). Pay attention to the code you are typing. Compile, run, try to figure out what's happening. Look for tutorials on the internet, and do the same.
Finally, assign yourself SIMPLE projects and try to write programs that meet your goals.
This is how we did it back in the old days, when all you had was a couple pages on assembly language distributed in your MS DOS manual. Modern IDE's let you see much more clearly what's going on than a code dump in debug.exe.
Seven puppies were harmed during the making of this post.
They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.
Best response posted so far.
Sheesh, evil *and* a jerk. -- Jade
Agreed. There are already enough non-techies that are trying to write code. Then real programmers waste time fixing their code.
If you write it yourself, it will probably cost you more later on to have the code fixed then to get it done professionally the first time.
Web programming with HTML/CSS and PHP/MySQL is probably the easiest route, but here's the thing: if you're not "one of us", it won't stick. Programmers usually learn through obsession. If I didn't love learning about computers and how they work, I wouldn't be able to do it. I've seen a lot of people say "I'm going to learn to Program", but in the end they just didn't have that bug that makes us spend hours and hours learning it - and enjoying it.
I've heard that there are these places called community colleges that supposedly have these "class" things. If you don't want that, you could probably read a book or a website or something.
Worst. Ask Slashdot. Ever.
That is all.
Don't ever teach marketing people programming. Feeling fulfilled after completing their first "hello world" exercise, they'll think "That was easy" and underestimate the hours needed to complete yet another project
Yeah...well I'm a programmer and it sure would be handy if I knew how to do brain surgery...it would really help to "feed my family".
Short of going to college, I would say you are in trouble. Just pay someone to make your website, and spend your time making yourself a better buisnessman.
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.
For starters, refrain from calling us "techies" if you want less rolling of the eyes. Similarly, don't say "I'm computer illiterate!" and then laugh as though it were a clever joke. That being said, you're forgiven because of "studs and studdettes". That made me smile :) Though I would've also liked "studs and mares".
OK, I'll provide some specifics.
Let's say an artist wants to learn programming, let''s say because in certain applications, like the Cycling '74 products, or if you wanted to develop custom MIDI controllers or even with some of the Native Instruments applications, a basic grasp of scripting and programming would really allow you to use some of the deep power of those applications.
Or if you wanted to do some game programming in Flash (don't ask why) or animation where there are programming aspects to the projects.
Is the best approach just to dig in and try to figure out the specific languages used in those applications or is there a good way to learn the techniques required that would apply across the board?
I'm ashamed to say that there have been times when I've gone in a particular direction in one of those programs and suddenly I was faced with something that looked a lot like programming in Basic or C or some object oriented language and I gave up on what might have been a fruitful direction because I lacked even a basic understanding of how such things work. I had tried to pick up a book or two and see what I could learn "in 28 days" or whatever and was discouraged because it seemed like all the books wanted to teach me how to write accounting programs or databases.
You can see that I don't even know enough about programming to explain my shortcomings, yet I would benefit in my particular area of interest from learning a little something about it.
You are welcome on my lawn.
How should a techie learn social skills ?
I'll probably get flamed into oblivion for this, but...learn flash and leave it at that. If the company wants a real website they can hire a professional.
So when your car stops in the middle of a desolate no-phone zone you have some prayer of at least getting it to limp to the next town? So when the mechanic tells you your car needs a new 'connuter valve' and it will cost $500, you know to take your business elsewhere? Because the guys at the quickee-loob are always forgetting to tighten the oil filter and put the drain plug back in? So you know that when the check engine light comes on it means eventually but the oil light means right now?
I'm not a doctor, but I know enough to know when I'd better see one and when I should just wait it out.
The guy is more saying, "At the very least, I have a decent car vocabulary. I want to start building a car in my garage. How should I learn how to build a car?"
Down with the career politician! SUPPORT TERM LIMITS
Sorry, non-techies don't get it and never will. If you want to spend money on lessons, forget that too. The only way to be a techie is to pass the proficiency test: Do you love this stuff more than life, wife, family and normal hours? Do you do it because the bug has bit you, and you can't help yourself? More specifically, if you're a M$ nerd, have you memorized the keyboard, and your hands know all the shortcuts -- and I do mean ALL the shortcuts -- better than your brain does? Was your first Linux Slackware? If you're on Mac OS X, was the first thing you did was to install X Windows? Is every user manual you ever acquired still lying in the bottom of the box it came in, pristine and untouched? Nobody sane does this stuff. If you're insane, you might be a techie.
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
Scratch or AppInventor for Android could be good starting steps. From there, will be easier to go then to more "textual" programming languages.
Most programmers (at least the ones I know, including myself) didn't start with such lofty goals. We also started very young - I started in middle school writing tiny little BASIC programs on a TRS-80. It took me several years, and lots of tiny, simple programs, before I even realized I had any sort of actual talent for it, much less the desire to do it for a living. Then I went to college and spent several more years learning programming at a purely academic level - again, lots of relatively small, simple programs that did not solve any difficult real-world problems.
Truth be told, it takes at least a year or two just to learn the fundamentals of computer science - which you should do, if you ever want to be any good at programming.
I'm not saying that it isn't worth your time to merely dabble in programming, and that you shouldn't do it unless you're willing to go at it hard core. What I am saying is that you should have realistic expectations, and lots of patience. Don't expect to pick up a copy of "Teach Yourself Web Programming in 7 Days" and expect to be cranking out professional looking (and more importantly, functioning) websites in a week or even a month or a year.
There is a lot of accumulated knowledge and hard experience that goes into being a successful professional programmer.
So my advice to you is to start with whatever kind of programming you have a real interest in. Be prepared to spend countless hours hacking away at your code before it even comes close to working the way you envisioned it. The more non-trivial the task, the more time you should expect to struggle with it. And remember that the learning process will be non-linear at first, because every answer will raise several more questions.
Most importantly, don't give up! Learning a difficult technical subject like programming involves lots of tears, sweat, and frustration. You will get to a point where it's 2:30AM and you've been staring at your code for hours trying to figure out why it's getting a "Segmentation Fault" or some such thing. In fact, there will be many such points. You just have to be willing to push beyond those barriers, and not give up. Of course, having a programmer friend that you can ask (hopefully someone with lots of patience) for help goes a long way.
My writing tends to be overly verbose and rambling, so let me just reiterate the main points:
Yes and no. If you're a kid in high school who wants to make some money on the weekends, knowing how to write web pages isn't a bad approach. It probably won't pay enough to really live on, though, let alone support a family on. If you already have a marketable but not computer-based skill set (business, accounting, sales, psychology, chiropractics, education, etc.) then learning to program a little is not likely to help your bottom line at all, and learning to program well is going to take time away from using the skills you already have.
Also, don't think that just because you learn how to cut some code you're going to be like your son-in-law who landed a $80K/year job right out of university; most programming jobs pay well but not usually that well, and there's no lack of well-qualified applicants for the good ones. If you want to be one of those, get yourself into a good university's computer science or engineering program, finish the degree, and polish up your interview skills; you might just get lucky. If that sounds too much like learning an entirely new career to you, congrats, you figured it out.
Don't get me wrong, learning about computers (how to maintain them, how to stay secure, how to recognize when there's a problem, and ideally how to fix the most common issues) is almost essential in today's world, much like the same general class of skills are relevant to cars, houses, and financial accounts. If you want to go a bit further, learning to write Office macros and/or shell scripts (CMD or Powershell on Windows, or Bash) is actually a really handy productivity skill. It's not glamorous, it's (hopefully) not anything a customer will ever directly see, and it's not going to give you the programming skills to write the next Facebook. However, it is programming, and of the most immediately useful type: it can easily save you hundreds of hours a year of tedious tasks, and let you put that time to more productive use.
There's no place I could be, since I've found Serenity...
I went to college to be an English Teacher and now I work at IBM in technical support. I never took a programming course, but over the years I have program in different languages to solve the things I needed to do: DOS Batch of course, C shell Unix scripts for automating tasks in Linux, Perl scripts, Tcl/Tk for little Windows GUI apps, HTML and CSS for websites, and lately I have started learning TeX/LaTeX for a book I am writing. In each case, I learned the language because I created a project that benefited me and was interesting. I would probably start by installing an OS like Ubuntu on your home computer. This kind of OS is more friendly to the introductory programming languages. Once you learn to write one a little script that allows you to do something cool, you will instantly find yourself thinking of other projects, and then you will be on your way. Good luck!
Every application will have tools that are more or less appropriate for the task at hand. Even just the two you listed -- throwing up a small web site and doing serious number crunching, are very different tasks, and there is no one tool that would be ideal for both (for some definitions of 'serious' number crunching).
It sounds like you're focusing on people who have no desire to become techies down the road -- people who don't want to invest a lot of time in learning the nuances of different programming tools. The most widely applicable tool available right now is probably Java, but I wouldn't recommend it to people who aren't interested in software development for its own sake.
Marketers and small business owners would be best served by farming out things like web site development -- good web development requires a very broad skill set that is rarely found in any one person anyway. If you want to learn some basic programming to automate repetitive administrative tasks like manipulating Excel spreadsheets on Windows systems, learn C# (...I feel so dirty). Visual Basic would be a good choice too.
Personally, I'm a Perl guy. I LOVE Perl. I deal with lots of text files, often on non-Windows machines. Perl is easy to learn, it can run on lots of different operating systems, and it has an AMAZING collection of modules that let it do just about anything. But... I can't really recommend it to someone who's probably never going to need to interface with anything but Microsoft applications on Microsoft operating systems.
include $sig;
1;
For live practice problems check out http://codingbat.com/ There's book-learning of programming, but then you also really need practice, and that's what codingbat is about. Disclaimer: my site, but hey, it's free.
If you can't write programs better than you phrased your question you will be no good to anybody. Learn to think and write clearly.
I suggest you start with a book similar to, "Programming Logic and Design" by Farrell http://www.powells.com/biblio?inkey=17-9781418836337-0 . This approach teaches you how to think about solving problems using computers, and you will not be stuck in any specific language. There are already too many people out there who learned a computer language and jumped to the conclusion they were programmers.
When you do pick a language, pick a GOOD source for learning. I like the books written by Charles Petzold or the books produced by Deitel and Deitel. Pick a useful language like C/C++ if you can.
Make a list of all the things you would like to program if you could, then start with the smaller ones and work forward. Learning to program Excel spreadsheets will teach a a LOT about regular programming, including how to relate to a database. If you are serious about database applications read Joe Celko's books; they will save you LOTS of time and save you from writing too many embarrassing apps.
When you get so you can produce some decent programs, polish up and get some depth by learning Assembly and LISP.
With all this as a foundation, you will have a terrific overview and some solid competency in programming. You can do whatever you want. You will have the mental skills to learn any language and do good work.
You might wonder if you can actually learn programming by reading on your own; the answer is NO! You must program to attain the skill. I have a friend who used to be an electronic organ repairman. He saw that the future was not in his knowledge of electronics, but in swapping out cards in the organs. He took a job on an oil rig for six months and learned to program from Petzold's book on Windows Programming during his off time. Three years later he was earning over $200/hr as a contract programmer. Much of his success has to do with the high standards he sets for himself.
Since it won't happen overnight, you might want to think about short courses offered by DeVry or a similar institution.
Good Luck, and have fun.
"The mind works quicker than you think!"
Excellent advise. I've got a CS degree and have been in the industry for 20yrs, but writing/securing web sites is not my gig. Sure I could easily write my own web site, but considering the price of hiring a reputable firm to do it for me it's just not worth the effort/risk. My time would be much better spent testing said web site.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
There is NO WAY. Let me ask you, how should a programmer learn quantum mechanic? NO WAY. In fact, i am wrong, there is only one way: GO TO UNIVERSITY.
Comment removed based on user account deletion
When trying to learn HTML, don't use IE... Use firefox with the firebug plugin loaded.. it'll actually let you see what is going on/wrong and will let you experiment on the fly.
At my company we've got a fairly good graphic designer and somebody gave her some flash tools to play with to mock up a website. The result is a intro page that would take more than fifty seconds to load at the full speed of our link to the internet. It would cost far far more in time for the graphic designer to learn to be a web page designer than it would to get someone to do it for us.
I have been a 'technology enthusiast' for the past 20+ years. I'm 31. I got my first computer at 11, wrote my first program in GW BASIC at 12. I learned enough x86 assembly to eek out a 'hello world' and a program that beeped. I was a master of batch files. Once I got a hold of Telegard BBS software source code in Turbo Pascal when I was 14 or so and hacked together my offshoot BBS software out of it. It compiled, it executed. Nothing fancy. Senior year in high school I started making web pages (in 1996 you did that with edit.com--not a domain name). I wrote a loan amortization program in QBasic for math credit. I've owned my own computer/network consulting business. Though no longer in the technology sector I'm still an avid hobbyist. I dabble in linux, made a hackintosh, I try every OS that comes my way. Console modding, and my new thing is Android...
Point being I'm a very experienced (though not in great depth for programming), multidisciplined technophile.
Knowing what I do know about programming (which while not that much on the grand scale is infinitely more than someone not so technologically inclined) I know it to be beyond the amount of dedication I have to devote to it, as much as I'd love to be a 'real programmer'.
If these people have that amount of dedication for it they can achieve it, as well as anything...but there is _so much context_ missing for them.
A noble idea for certain but I'm not so sure programming is an "everyday Joe" kind of task. It's a specialty. I'm not saying that you need to be uncommonly intelligent to do it, but it is a specialized discipline to say the least.
...or I have been so disconnected from modern high level languages that I've got it all blown out of proportion and masterful coding is only weeks away.
Please tell me that's the case...
Spoken like a lawyer... cya(cover your a...s).
Seriously, what's the point? I'm not saying it's pointless, but if the goal is to learn more about technology, why programming? Unless you're actually going to use it somehow, it's going to be a tremendous pain in the butt to learn and retain all these new ideas. Even if you do learn a bit about programming, there are always going to be professionals out there that can do it faster, more efficiently, and more securely than you can -- and if it's something for a business, you should probably be going with them.
If all you want to do is learn more about technology, subscribing to Popular Mechanics and reading it every month would be a good place to start. Or even just reading Slashdot every day.
If the goal is to learn more about computers, then it would probably be a lot more practical to learn about hardware than programming. Learn what the different basic parts of a computer are, what they look like, what types there are, how to replace them... that kind of stuff.
For a car analogy, instead of learning about the software that makes your car work, you should be learning about how to change the fluids and diagnose simple problems, check the tire tread... that kind of stuff.
http://www.tenjou.net/
It's possible that all those times I had to wait in line to get thirty minutes at a terminal made me a better programmer. I got used to thinking a lot about what I was going to write before typing it in. Pity I don't apply that to slashdot posts.
I disagree.
I don't need a "mindset" to sit down and start reading.
I just need to sit down and start reading. Once I sit down and start reading, I start learning.
Funny how that works.
I wrote a little Javascript tutorial that I teach to scouts to satisfy the programming requirement of the computer scout merit badge. I haven't gotten much feed back from people who have just seen it on the web. http://nicholdraper.com/scouts/jtutorial1.html. I wrote it because anyone who has access to a computer has the tools to execute this little tutorial. The scout merit badge has a good introduction to computers. I wouldn't recommend how I learn languages to a non-techie, I've taught a couple dozen scouts and only the techie ones really finish. But everyone should understand the idea of a machine processing data. Techie people want to understand deeply, non-techie people want and overview. So much more than a very simple Javascript program just causes frustration.
The best way to learn is to read The Daily WTF and then don't do what is described in the articles.
un-ALTERED reproduction and dissimination of this IMPORTANT information is ENCOURAGED
Local Community College class is $76 a credit hour now.
In-state.
Before fees and books.
$76 may be simple for elitist overlords like you, Frank. It's real money for the rest of us. Money that is beyond us without financial aid.
I learned BASIC and COBOL in the mid nineties using Windows 3.1.
Is there any hope for me to learn a modern programming?
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.
Frankly, I don't see why somebody shouldn't start with databases if they feel so inclined, other than contingent practical obstacles (many books about databases assume you already know how to program). There's a lot of very useful stuff you can do with databases even if you don't know how to program. You can load data sets into a database and write custom queries that answer all sorts of useful questions about the data, just by knowing how to use a graphical client and a moderate amount of SQL.
For somebody who's more into the market side of things rather than the programming side, actually, data modeling knowledge might be more useful than strict programming knowledge.
I second the MySQL = FAIL assessment.
Are you adequate?
Learning Java is remarkably valuable. An easy way to start is with a cool tool called BlueJ from bluej.org. It's a "teaching IDE" that's used to teach people programming who have never programmed before. There's a textbook that comes with it. It's been used by literally millions of people all over the world.
This book seems to be helpful. It teaches HTML, CSS, JavaScript, PHP and database programming for beginners.
Web Programming Step by Step
by Marty Stepp, Jessica Miller, and Victoria Kirst
http://www.webstepbook.com/
As a non-geek by training (history/economics), I got started with web. I recommend making Drupal sites as an introduction to programming. Drupal is a very practical platform for solving all sorts of problems, and is a lot like programming without all the code. If you catch the bug, you'll move on from there.
Here's how I grew up, technologically speaking :
* HTML/CSS in dreamweaver (cleaning up OCRed documents)
* HTML/CSS, hand-coded
* Drupal
* PHP
* Linux server administration
* Java
Pen down
Forward 30
Pen up
That's telling a computer what to do in logo. While it may seem trivial to send a virtual turtle around the screen it's not a big step from there to milling machine G-codes or AutoCAD lisp.
Playing around with a scripting language or a shell should give you some ideas - even the bash shell can give you GUI checkboxes etc if you use "zenity".
Some kinds of database programming only. Transactional applications can be very boring, yes; they tend to be about inserting and looking up single records. Analytics, on the other hand, can be pretty interesting, because it becomes about how to use large data sets to answer complicated questions. Basically, the more interesting kinds of database programming are a more advanced, larger-scale version of the stuff that the more advanced spreadsheet users tend to do.
Are you adequate?
C is certainly not the easiest language to learn but it will give you a very solid base that will make every other language easier to pick up. And yeah, most books are focused on boring bussiness applications but you need to remeber that it's programming you're learning, the bussiness apps are just contrived examples that are designed to touch on all of the basic programming elements.
THE classic C book is K&R, it does not have example applications, it has examples of techniques. If you take the (non-trivial) time to understand K&R from cover to cover you will still not know how to write MIDI drivers but your skills will be such that it will be easy for you to pick it up in a couple of days.
Note that K&R uses unix as it's example operating system but it does not teach you how to compile/link on any OS. Linux distro's usually have the compiler/linker already installed. If you want to use windows then you will need to find (and learn) an IDE, a respectable freebie is Eclipse.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
What if he's really just asking how to put on a band-aid instead of brain surgery? A very simple webpage with a perl cgi-script or two is no harder for a beginner than it was fifteen years ago.
What you wanna do is write a C++ compiler. Make sure all the ambiguous cases are resolved according to the latest spec. After that, you can further hone your skill by writing the standard libraries.
That's enough to get you started.
Fuck systemd. Fuck Redhat. Fuck Soylent, too. Wait, scratch the last one.
Not necessarily. I'm in a similar situation: I took a couple of CS classes in college, mostly for the heck of it, and learned a little C++ (this was 1996). I learned a bit about algorithms, and big-O notation, and recursion, and pointers. Intellectually very rewarding, very interesting. But it taught me not a thing about how to write "Hello World" for Windows.
I can think of several small applications for Android that would make my life easier - a custom data entry program for a database I'd like to keep, for example - but I don't know how to write a program in Java, let alone in Android's GUI. "Draw box with the following five questions and text-entry boxes, and then transmit that information to a web page, which will then save it in a MySQL database" is the kind of task that should be trivial by now. Why isn't it? And if it is, where can I learn how to do that?
Disclaimer: I'm a professional programmer.
If you are a high schooler who wants to make some money during weekends, there are more efficient ways of making money than programming (as in: money-per-hour invested).
You can take a course and go watch a swimming pool. Teach a foreign language / maths / any other thing to younger students. Or just work as a part-time waiter. You can probably get on those fairly quickly, and get a decent amount of money.
Programming, on the other hand, requires a very significant initial investment of time, without no benefits. And after that, the dollars per hour that you will obtain as an amateur programmer will not surpass the waiter's.
So my advice is: do it only if a) you are passionate about it or b) you picture yourself spending the rest of your life doing that.
"Pick a project and work out the language by trial and error! Whee!"
This is the path to madness. When you're breaking your way into the tech world, starting from outside, it's easy to find yourself with a problem where you don't know enough terminology/context to write an effective google query, and no idea how to read the answers your query returns... a situation where continued effort produces vanishingly small returns. I once spent well over an hour just trying to guess what the key notation "M-x" meant on an academic linux app (having not encountered emacs). "M?" I ask you.
It is so much simpler to start out with an O'Riley book. Many of them begin with the very basics, are mildly sarcastic, and have all the benefits of RTFM... a few chapters in you'll know little details that the trial&error folk haven't picked up in a decade of experience.
Once you've got a grip on the basics, *then* you pick up a random project and try your luck.
First off, stop considering yourself "a non-techie." That will help immensely. Second, don't seek to become "a techie". That will help even more.
Guru Meditation #6d416769.21610a21
A non techie should focus on what they do well and hire a programmer.
There is no way a non techie can begin to compete with what a good programmer can do. There brain space is just not big enough.
I am a programmer and I am a businessman. I have one foot in each of two canoes. I have had to remove my foot from the programming canoe. I like it - I wish I could go back to it. But my brains are simply not big enough to do both.
We have doctors who will be doctors. We have microbiologists you will be microbiologists. We have lawyers who will be lawyers. We have micologists who will be micologists. We have poets who will be poets.
Very few are gifted enough to pursue more than one field. But of those who are able to place one foot in each of two canoes - they don't need to ask the question in the title of this story because they already know the answer.
A non-techie is simply a non-techie and they are unsuitable to be programmers because you need to be a techie in order to be a programmer! Its as simple as that!
BTW - I hire accountants too. I'm not an accountant and never want to be one. No successful business is going to have one guy doing everything - that is unless that one guy wants to be a slave to his own business and then who does said guy pass it on to when he is too old to do it anymore. If you can't leave your business to your kids then IMHO you failed.
This is the sort of thing that I - and I suspect many others - want. I will never write a "real" website, but I'd like to be able to cobble together some little script-level work to knock out stupid tasks. You don't have to be a mechanical engineer to change your own oil, and you shouldn't have to be an elite programmer to do something as simple as a complex search-and-replace.
What if it's a simple internal site? I mentioned this elsewhere in this thread, but you don't have to be a mechanical engineer to change your oil, and you shouldn't need a BS in CS in order to write a simple web interface to a MySQL database.
"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.
No, they're not right. If the best you can do is throw up a small web site, then it will look like something you've... well, thrown up. There's a reason that there are people who make a good living at this sort of thing -- that's because they keep your non-technical ass out of places it doesn't belong.
If someone self-identifies as non-technical,a nd is learning this profession because they want the money or they feel they have to - I don't want them near me. They almost all write crap code and have no ability to think logically (in the comps sci sense, not in the philosophic sense). You have only to look at the millions of comp-sci grads coming in from India; and those who got into comp-sci here in the States for the money back int he 90s and early 00s. Perfectly intelligent people who can't code their way out of a wet paper bag, and who lack the critical thinking skills to understand that copy and paste is not "reuse".
Now get off my lawn.
Technological knowledge isn't exactly knowing how to program. Programming is a world of its own and ranges from collecting requirements for the project, over designing the software, to the coding of the actual application in a language that is most suitable. For a non-techie this is far too much to comprehend just to get an understanding for the tech.
To get a basic understanding how computer and software work, you can probably get away with reading through related articles on wikipedia.org and what your favorite web search can find. This will help to deal with techies: Firstly you'll have an idea what they're talking about and secondly you know what is technically possible for them to do or what skills they need to suit your needs (when contracting a web designer or hiring a programmer for example).
Once you realize the extent of the knowledge behind the given tech, you can pick one to 'specialize' on. For example if you're interested in databases you could read a book about designing a database (the model, not the software). SQL is just the language to manipulate and query the data, it doesn't help you understand the principles behind a database.
As mentioned in other replies, non-techie software can be a security risk and may end up entertaining the readership at thedailywtf.com.
Now if you're still serious about getting into programming, you would need to work through at least one book from each of the following categories:
1. A book that teaches you the given programming language (that shows you what you can do with the language)
2. A book that teaches you the philosophy of programming (which tells you how you should use the language)
3. A book that teaches you how to design software (how to get from software requirements to the finished application)
4. And if you chose an object oriented programming language you may also want to look into a book about design patterns.
As for programming languages, pick a clean, mainstream language with a huge user base to get help easily. Once you understand the principles of programming, it will be easy to learn other languages.
I'm trying to find a good book to learn Postgre (or MySQL) and Python. Ideally, I'd like to setup a project to setup a database of stock market and economic data. At least there's some object I can work towards and data is easy to get. Also, the only thing I haven't learned well in computing are databases and knowing a general use computer language really well, I've tried Perl but syntactically, doesn't work for me.
I've some introductory programming experience from college courses C, C++, assembly and Shell Scripts (not my major and been a long time). I've been able to pseudocode the program I would need to get this project started and what tables I'd setup in the database.
The thing is, I'm unable to find a good 'classroom' type of book on databases. I haven't found a book with a project in mind. Most of the books I've found have 10 out of 20 chapters on database theory - not that this is a bad thing (at least I have some clarity and I like learning the techie stuff). A lot of the books focus too much on techie stuff that they don't give any insight as to what is next. I've looked on iTunesU, bookstore, on-line and come up empty.
I'd take it someone who's learned to be a DBA has learn somewhere along the line in a classroom what to do. Also, a lot of programming books have one chapter on SQL and database books have one chapter on using X programming language with X database. Can anyone point to something more useful?
I expect to royally fuck up the database, it will be slow, unoptimized, and poorly organized. I could probably save 2000 lines of code by using Python modules but I'd like to learn from experience.
Most people are far too stupid to ever program a computer, no matter what the language. For example, most people are religious and believe all kinds of ridiculous nonsense. This approach doesn't work with computers.
Find some kind of text file to work on. Just about anything will do: an HTML file, contact list, ... Anything that you can view
with a simple text editor. (Stay away from
doc files or anything with a lot of special
formatting commands requiring a word process,
like Word, to view.)
Start playing around writing programs to search for text and print things out. Maybe read the file and write it to stdout. Then change some things before writing it back out (like changing all "Bill" to "William"). Just play around and learn how to use the language.
At this point you will have the basics down and can start doing more complicated things.
Some other suggestions:
Simple. You don't have to install anything to use PHP (let your webhoster take care of that), and you can see the results immediately in not just a sandbox but *in your actual browser*, which is tremendously gratifying to a newbie.
While Python is obviously the better language (I really won't defend PHP there, the language is patently silly), the trouble of having to install it and then use a console for your output is going to turn people off. Most won't even get past the download-and-install stage, and the ones that do, will miss the thrill of having something that "does something cool" and is shareable with others through the web.
My thoughts are, if they can’t figure out Google enough to see what is commonly used and then teach themselves Well, then, they don’t need guidance. They are not technical/ A DBA/Developer etc in nature and would need too much “help”. Set them free to go back to business or whatever and leave the tech up to the tech folks. If someone has an aptitude towards DB’s, programming, computers in general, they don’t have any use for this FAQ.
I think small business owners really need a lot more broad architectural knowledge. There is a wealth of OSS software out there, ready and willing to empower business owners and bring their technology costs down.
With just a dabble of everything from scripting to SQL to installing packages, any business owner should be able to manage a reasonably small domain with a mail server, web server and website.
You can't legislate goodness. Let each to his own destiny, by will of his freely made choices.
I can't even get non-techies to USE a computer correctly, and understand the basics, and you want them to learn to program..
WHAT ARE YOU SMOKING?
For about 10 years, I have been teaching Inform to students (mostly English majors) in courses that combine writing with media production. I start them off with HTML and CSS (just to get them familiar with the level of accuracy required of any kind of coding). I've also taught Flash, but this fall I will probably drop it to make more room for Scratch.
The point is not to make these English majors into professional programmers, but rather to familiarize them with fundamental processes such as iteration, versioning, scaling, beta-testing. To someone who has never written a computer program, even very simple concepts such as if-then statements and variables can be completely baffling. I notice that students who play old-school text adventure games are at first very unforgiving about the limitations of the parser, but after they've programmed their own short games, and watched their beta-testers come up with reasonable vocabulary words that they expected the programmer to have implemented, students are more ready to appreciate when a text-adventure author has done a good job anticipating the user's actions. This is a lesson that, I hope, translates to their encounters with other interfaces, making them more willing to take beta-testing seriously, in the future, when they might be writing the copy for team that includes programmers.
Literacy Weblog http://jerz.setonhill.edu/weblog
This could actually work.
Don't forget that C++ is a proper super-set of C. That would mean you'd have to write libc itself too and in the process learn a bit about system calls.
Might even be the fastest way if you are good enough. See you in 5-50 years.
I was amazed and delighted by this: http://www.sci.brooklyn.cuny.edu/~arnow/ED/correctnessproofs.html "Program correctness proofs have recently been successfully added to Brooklyn College's required course on mathematical and computer literacy for the general student". They are apparently teaching 'non-techie' students at least the rudiments of a skill that I would bet a majority of 'professional' programmers have not mastered.
Using a complex CMS system to learn to code, is like learning how to turn a wrench on the space shuttle.
Sorry, first read a book on programming (I am serious if you are a non-tech that is lesson one).
Then a good idea would be to learn at least a basics, data structures, operators, iterators, etc..... Then make something really simple, that has a little bit of everything.
But all that aside; I do not understand the concept of a non-techie programming. It is like a life guard who never cared about swimming. If you start programming you will become a techie to a certain level at least, otherwise you won't be programming.
I know people who copy-paste large amount of code and then try to do simple things, then they are stuck because they do not understand what they used. They use the visual editors and jump into OOP without knowing the basics. That is what you can accomplish to run at a complex CMS without knowing the basics.
Then again, I am not saying go with Assembler, LISP or something you never use again. PHP is a good choice for web, but if you want to learn how to write a threaded application, a tcp server or client, and in fact anything that would run on a server or desktop, PERL or even C would be a better choice to learn.
Just my 2c
First of all, get a Mac as a workstation if you are a non-techie. Use any Unix on servers. Use no Windows or Microsoft products. This is by far the best advice you will ever get. If you ignore it now you will regret it later when you finally find out I was right.
Don't learn "programming" because that is too broad. Don't pick a language to learn intending to program in some other language later. Very few people can do that, and typically they are the ones who were programming at 13. It is a fascinating discipline all on its own, but I recommend you be very practical if you are a latecomer.
Instead, learn the kind of coding that goes with whatever you are actually interested in, and learn and use even basic programming skills to enhance your work in that field. For example, a graphic artist can work on one photo at a time in Photoshop, but if they learn AppleScript, they can write a 20 line AppleScript workflow that can make Photoshop process thousands of photos an hour unattended, and then he or she gets to be the boss of the other graphic artists. Other programming languages are not as valuable in graphic arts and other creative fields. In some businesses, Java is huge, in others, being able to make an iPhone app is huge. In marketing and communications and many other fields, being able to make Web code can be advantageous, for websites and email campaigns. Go where your existing knowledge takes you, and program there and drink everybody else's milkshake.
There are already plenty of programmers. What is missing are non-programmers who can do enough programming to be dangerous in their own field so they can solve everyday problems. The guy who created the World Wide Web was a physicist who wanted to solve the problem of scientists sharing documents with each other for peer review. He was not necessarily the best programmer in the world, but his knowledge of the problem he was solving made him the best person to solve that problem with programming.
If you learn Web code, learn the DOM (Document Object Model), not the languages. Learn what UTF-8 is and use no other character encodings. Learn how to build a DOM by marking up a document with semantic HTML, learn how to modify that DOM by styling it with CSS, and then learn how to rewrite that DOM programmatically with JavaScript. Don't get the huge thick JavaScript book and learn everything about JavaScript; get "DOM Scripting" by Jeremy Keith and learn the parts of JavaScript that relate to the DOM, which is a much smaller and much more useful task. Everything in Web development revolves around the DOM. After that, if you continue, learn basic Apache configuration. Apache is built-into your Mac, and is already running, so it is not hard to learn to make it do tricks. After that, learn a server language, probably PHP, so you can cause Apache to create pages on the server on the fly, and collect the information from forms and other common tasks. PHP and many other server languages such as Perl and Python and Ruby are built-into your Mac, ready to run, you just have to turn them on. For an editor, use TextWrangler which is free and is the lite version of BBEdit until you optionally buy BBEdit or find something you like better but you probably won't. Use the very cheap Acorn for graphics until you optionally upgrade to Photoshop and Illustrator. Use iMovie which is included in your Mac for video, and the cheap QuickTime Player Pro for encoding. Use GarageBand which included in your Mac for audio. Use the cheap Transmit for interacting with remote Web servers. Adhere to standards such as W3C HTML5 and ISO MPEG-4 at all times. Test in Safari and Firefox. Use browser-specific hacks that are made by experts -- such as the one that makes Firefox handle standard audio video -- don't put hacks in your own code. Write as little code as possible, make it readable.
If you don't like the above paragraph, don't get into Web coding. Just learn to use SquareSpace. Also a marketable skill.
Do what MIT does: teach Programming first .. via Scheme!
Look, there is no "right way" to start. MIT presumes you need to learn about what programming is all about first. Then they teach Java, C/C++, MatLab and so on later on in engineering and science classes. They created a nifty system, Processing(.org), that takes the sting out of Java and uses it to show designers how to hack.
So I got a 286 from my uncle when I was like 21 years old. It had 4MB RAM 30MB HD couldn't execute in protected memory so everything was command line. I spent countless hours figuring out this thing called DOS. I looked at debug and figured it out. Got some books on assembly, read them and created a 50 page printout of code that was a simple screen saver that simply swapped the current screen for whatever I wanted. It felt good, powerful to be able to manipulate this machine to do as I wish. So now I'm older still programming an loving every minute. Languages come and go but good fundamentals will always help. Those are: Never give up (majority of CS problems are solvable. Most problems cause us humans to give up way before we should. Keep at it.). Use a search engine (someone's done it before you just need to figure out how to do it now) Get your hands dirty. (nothing like compiling and testing and seeing what happens) This is a profession that is always changing, always something new to learn and never gets boring. If you like stable sure things this is not for you. Dynamic, slightly ADD, multitask like crazy, get easily bored. those are the traits.
For two reasons:
First, SQLite has a niche that isn't going away anytime soon. As a trivial example, it's perfect for anki.
Second, the last thing you want is to have to become a DBA or a sysadmin, or pay for shared hosting, just to get started learning something. SQLite is available as a single command, which can be downloaded as a single binary on Linux, OSX, and Windows (unless it's already in your distro/repository/OS), and databases are just single files, with no maintenance other than (maybe) the occasional vacuum.
The downside is that, while SQLite is easy and intuitive (with great reference documentation) for anyone who already knows SQL, it probably doesn't have many intro books written for it.
Don't thank God, thank a doctor!
I know I'm buried, but I don't know where I can legitimately inject this...
Spend 15 minutes here. If you understand what's going on, you can start taking it more seriously -- pick a language/community (I recommend Ruby), ask around for the best books on the language, and get the fundamentals of the language down. This may not be as instantly gratifying, since you'll be on a commandline most of the time, but it'll work. Then move on to frameworks, pick a solid open source one, and build what you want to build.
Oh, and learn Git, somewhere between learning the language and learning the framework. You're going to need version control, and distributed means it's easier to start with, and it scales. Plus you'll be able to use Github.
Or you could learn just enough to put something together with PHP, but the result is going to be yet another program by a non-technical person. That means bugs, vulnerabilities, inefficiency, classic design mistakes, unmaintainability, and just generally bad things.
The question is, really: Do you want to become technical? Or are you just looking to cut out the technical middleman?
Don't thank God, thank a doctor!
The first programming language that you learn should be one with a quick return on investment, in order to keep you interested. A quick return on investment means you shouldn't have to read 400 pages worth of programming textbook before you can do something fun.
And the quicker the better. I learned BASIC first. You can type one line in immediate mode and get an immediate result, e.g. PRINT "HELLO." Contrast this with most modern object oriented languages wherein you have to create a namespace, then create a class, then instantiate the class, then write a method that prints hello, then call the method. In the latter case, it is too easy to become discouraged with how much work must be done just to accomplish something simple.
Learn Python. (Ruby is good too.)
If anyone suggests you learn PHP, punch them in the face.
There's enough bad code out there already, the last thing we need is non-technical people adding to it. This would cause the same issues that arise because of people who know how to use Windows but don't know how to use a computer. If you want to program then you need to learn how a computer works first.
Learning to program is like learning a second language. If you're not going to go there, live, and learn to love the culture, you can forget ever being useful in it. There's no such thing as a "non-technical person" ever learning how to program effectively, and there never will be. It's like saying "How can someone who hates math learn calculus?"
just download and install one of this http://www.wampserver.com/en/ take a new book on php, old book on HTML and start experimenting :)
Seriously. Think I'm being too harsh? Think back to all those HTML abominations you've encountered. These people can't get presentation logic right, what makes you think they'll get business/domain logic right? It's like pr0n -- leave it to the professionals for god's sake.
You can't remain a "non-techie" and learn how to be proficient in a techie area like programming. You have to chose whether you want to give up being a non-techie. If you do then roll up your sleeves and learn it like anyone else. I would recommend downloading python, getting the online freebie, "Dive Into Python" and work your way through it. Then read a book on Data Structures and one Algorithms. Next work your way through a few of the problems on Project Euler. By that time you will no longer be a "non-techie". I hope that is OK with you.
Within the first week of learning you will encounter loops such as "for", "do" and "while".
Do a search and read about the "fencepost problem".
Realize you need to know these concepts for your loops, while syntacticly correct, may contain a bug.
Programming is not all about just language.
In post Patriot Act America, the library books scan you.
I love Head First series of books. I believe they are great and easy enough to follow for basically everyone. In the scenario suggested I think one should start with "Head First XHTML & CSS" and then move to "Head First PHP & MySQL" or "Head First Programming".
Buy a book on how to draw a flow chart and see if you can describe each step of a process using that knowledge. Once you're capable of handling the flow of logic through a diagram you'll be better off learning the flow of logic through a program (as, aside from syntax, it's the same idea.) After that learn what "types" exist, such as integers, floats, boolean, characters and strings. If you can hold all of this, thus far, in your head and make peace with what it all means then find a language that's easy for someone to pick up on, like PHP, which basically lets you write a program from the first statement typed.
Programming is something I honestly feel should be a fundamental skill for everyone; I think the reason why most people don't learn to do it is that they've convinced themselves they won't understand it. Have confidence that you'll get it and practice. Remember that good programming is learned over years and not days or weeks. Try not to get frustrated, the WWW has more than enough information available for anyone to learn.
"It's here, but no one wants it." - The Sugar Speaker
'm a Perl person, so many will say I shouldn't comment on this at all. I've spent about 35 years 'sweating over a hot computer' as someone once said and I still enjoy a lot of it, although I've partially retired.
If you read the history, BASIC was designed to give access to computers to non-techies: http://en.wikipedia.org/wiki/BASIC and this is the one belief that uncle Bill [we can't say his name here, can we?] and I share.
I showed my son some basic BASIC stuff on an Oric Atmos http://en.wikipedia.org/wiki/Tangerine_Computer_Systems in about 1988 [the dates in wikipedia don't seem quite right] mainly: 10 PRINT "HELLO" ; GOTO 10; as he was quite small. He's been programming pretty much, ever since, but he grew up around it too.
I'm not going to get into a flame war about GOTO or Basic in general, but script languages and some of the open source Basics that are left are pretty good. I've been teaching a neighbour some Perl too, at about this level. I wouldn't try and teach them PHP before doing some of this more 'linear' stuff either. I've been experimenting with Scratch and especially etoys: http://www.squeakland.org/ and I really like the visual object model but, if you're an adult, you can't use it for simple accounting for example or parsing a file. So a lot will depend on intended purpose and age of pupil as previous posters have said.
On y va, qui mal y pense!
When I wanted to run my own consultancy instead of being employed as a tech.
I got MYOB, the 19xx/20xx tax packages, loaded a customer tracking database,
(then built one for what I really needed), paid for some adverts, got my name out there. made a little money.
Then got an accountant who gave me lots of business advice, did a small business course,
got in touch with a marketing mate, got professional graphics done, registered trade names,
built up quality systems.....
Then got the .... out of IT, now I'm building wooden surfboards and having a great time,
but of course using computers towards a 'real' end.
Programming feels like becoming part of the machine,
you plug yourself in for hours and days and months on end.
You know that language, you feel it and talk it, live it.
I chose life....
Go well
Piano or guitar, really a lot of fun especially during the holidays. In one month you'll learn to play many songs if you put some real effort into it. Your family will love you for it. And when the time comes that youll have to worry about feeding your family, take the guitar and hit the streets. People throw money at sidewalk musicians.
Seriously, the world doesnt need anymore shitty programmers. What the world does need is parents who spend time with their kids so they grow up to be stable adults. And if there ever comes a time when shitty programmers are in high demand; HP, Microsoft and Acer have more than their share.
That, that really grinds my gears!
i would advice someone, who wants to know more about programming,to learn several language for a short period of time (maybe 4 month, if you study like 10 hours a week). you won't master them but you get insight.
1) get some basic understanding with a language like java/c++
2) get understanding of a pc with an assembler, there is an easy to use mips simulator called spim
3) get understanding in specialized programming language like for web designe (html or php) or something different like prolog (logical programming for basic AI), maybe database language for sql, xml
that won't make you a programmer, but you might be able to understand some of it.
The upside of making your pocket money programming (e.g., making websites on your weekends) is that it can feed into your later career.
Getting into decent courses or bottom-rung jobs can be a lot easier if you're already boasting some small subset of related skills. And passing those courses/succeeding in those jobs is a lot easier if you're already well versed in the bare-bones basics.
Not to mention that it's better to earn your pocket money doing something you like versus something you don't. Propping up the fryer at Burger King might earn you more money per hour, but why tolerate that unless you're desperate?
Now there are two reasons why a person might want to have a go at something new: (a) Intellectual interest and I'd-like-to-have-a-go-at-that (b) need. "We're sending you to Germany for 3 months" might be a (b) but things take time and without a GREAT deal of time and effort competence might reach 'OK-useful' but nowhere near 'fluent-reliable'. On the other hand (a) - wanting to explore - (especially when there is a vast area to explore) should lead to personal satisfaction and confidence building that might make a jump to (b) a lot easier (or show you why it is unsuitable for you).
The thing about programming is nothing to do with a particular language - it's a thought process as basic to a programmer as the sound of words to a poet or shape of things to a painter. To be a good programmer you need, amongst other things, to be able to use your brain.
Anyway, the complete answer to your question is here : http://vulpeculox.net/ob/Programming.htm
"Nontechnical people — for example marketers or small business owners" should not learn programming. Instead they should hire programmers or the technology should provide them tools suited to them. You don't solve problems by changing roles.
Here's the tip off... "for example marketers or small business owners"
These folks LIVE in Excel and Word. VBA is a perfectly good language that integrates with what they use all day, every day. There are tons of examples available. They typically have real problems to solve where the data exists in Excel. For that matter, LEARN Excel. That app has enough bells and whistles to keep a person busy for a lifetime; do they know how to use pivot tables? How about the offset method for chart ranges? Stats? IRR and other financial computations? Connect to remote data sets including web pages? It's all in there.
The main point, as others have mentioned, is that the key to getting into programming is to have a problem to solve, then pick a tool to solve it. Excel/Word/VBA provides an easy entry point for exactly this to happen.
If they can do VBA, they can then branch out and learn other languages.
I don't think a non techie should learn programming in part time, from books or by auto didactic ways. Either give him a course and a mentor or just leave it. Further more the idea that a non techie should start with PHP or similar is completely absurd. There are hundreds of things that can go wrong in using PHP, which you had to teach him as well and wont give him any idea about programming.
The examples where a non techie built up an access data base and then demanded to get a web front end for it and deploy it for the masses (millions of users) are countless. And they simply won't get why this just does not work.
For instance the boss of the german company web.de (one of the founders a few years ago, not the actual one as the company got sold) did bullshit like this on a weekly basis.
angel'o'sphere
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
I'm an engineer who occasionally does a bit of programming. I've found that programming skills need to be maintained, or they deteriorate to the point of being useless.
I recently did a few Python scripts after about a year of not programming anything. The first few days were filled with 'how did this work again?' and lots of looking up basic information. The first script took me 3 times longer to write than it would have last year. A professional would have taken 10% of the time I needed. I probably wasted more time than these scripts will ever save me.
Now that's ok with me because I enjoyed the challenge, but it's not a sound business decision.
Learning HTML, CSS, PHP, MySQL, C#, SQL Server, and all the rest is a complete waste of a small business owner's time. You didn't need to learn VBA to to make use of Excel, did you? Likewise with the web. You want to stand up a quick web site, then learn how to leverage a code-less tool, such as Google Sites or the dozens of web-based content managers out there with web user interfaces. 95% of the effort to maintain a solid web site is in the content, not the programming. The programming is just the tiny little part done up front, to enable the real work to take place.
Personally, I've become more and more impressed with just how much work can be done with Google Apps -- the combination of gmail, Google docs, Google calendar, and Google sites. You want to create a shared budget and display it on a web page? No problem: create the spreadsheet in Google docs, setup the sharing parameters, then insert the spreadsheet into a Sites page using the built-in spreadsheet widget. Easy as pie. The spreadsheet widget even lets people edit the spreadsheet right in the web page if you want. Perfect.
The thing to get over is obsessing over appearances. Unless you're programming a site your customers will be seeing (in which case, hire a professional designer to give you a template), don't give a second's thought to prettiness. Function is everything. Pretty can wait.
The other critical thing to learn besides programming is how to model requirements. If you learn the behavioral parts of UML -- especially business process modeling notation -- you will be able to intelligently and concisely communicate with programmers, when you need them.
"We receive as friendly that which agrees with, we resist with dislike that which opposes us" - Faraday
A non-techie should learn how to program with Hypercard. Finding a 68k Mac might be the hard part.
http://en.wikipedia.org/wiki/Educational_programming_language
I've been coding for about as long as you have. I've seen all you're talking about. It's stressful sometimes. At the moment I'm between coding Unix C system level stuff (sockets, semaphores, shared memory etc), a VBA course and VBA Excel work, Java Spring MVC and hibernate and support of multiple systems. My job is no picnic, it can be stressful, and I'm not rich, but I've been able to support my family well as the sole earner. The secret is to ignore all the political BS and realise that sometimes you have to do it the way you're paid to instead of the elegant way. I miss the RAD tools of the mid 90s and think Java and the web platform suck. That doesn't matter - I don't usually get to choose what I use to write the system or what is in vogue in the industry. If the platform sucks I still make the most of it. If a job needs to be done my bosses know if they assign it to me it will get done if at all possible, and if it's not I will clearly state why. My success is not language or platform dependent. Learning new languages, new libraries, new platforms, new methodologies, new paradigms...none of that scares me or puts me off. They're just the tool I use to solve the problem, and that is what I love doing (particularly for interesting problems).
My first IT boss told me I'd never succeed. I proved him wrong. Anyone that's told me that since i've moved on and proved wrong. Where I've had a disagreement with someone over the way to do something if I've won out and there have been hard feelings I've moved forward despite them. I've had bosses try to keep me in low paid work or put me down. I've moved on to better positions. If a boss workplace or manager or colleagues put too much in my way to allow me to succeed, I go find somewhere else to work. So far I've had 4 IT positions through my whole career (though worked with plenty
These posts express my own personal views, not those of my employer
You win for being the only post yet to mention UML, in a business process modeling sense, no less!
then the answer is - "of course not"
Sounds like a job for javascript. Classes are available at your community college. Free tutorials available by searching google.
What you describe is relatively trivial. About half as trivial as it was 18 months ago. ;)
Many people will help you, but only if you do your part.
AC because quoting a genius (OK, weirdo asshole genius, but I only wish I was such a weirdo asshole!) should not earn karma.
I seldom see it recommended anywhere, but blitz makes a line of programming environments for the basic language that include directx and opengl support, as well as support for linux, mac, and windows. (The latter portion of the previous sentence was to address any concerns that they are not recommended due to platform lock-in...)
They come with informative documentation and tutorials, and I would advise anyone who knows nothing about programming to try out Blitz3D. I can't see how any more complexity could have been hidden from the user without sacrificing utility.
Caveats: I hear blitz programs don't run reliably on vista. I am not yet forced to interact with vista, so I can't comment on that. Also, make sure you have the most up to date help documents, as the most recent version is much more comprehensive than older versions.
There are lots of jobs that don't need any of that, that are great programming jobs. Here's a hint:
1. stay away from Fortune 500 and banks. Instead look for smaller places, or larger industrial, scientific and avoid software-is-our-primary-business places. Then you will find yourself a small software team. Okay, so you might find something that belongs on the front page at the Daily WTF, or you might find something great.
2. stay away from places where someone else is the IT department.
3. The ideal software team size is four coders and one full time QA/test person, with one clearly acknowledged leader. Anything more is painful, and anything less is okay provided that the product is at an early stage and can be managed by the smaller team.
4. Join a place where you can be that clearly acknowledged leader, if that's what you want, by being the first hire at a startup, or if you want to work with a small team, find one at size two or three and grow with them.
W
... when Tina the Tech Writer wants to get better pay and tells Alice, "Alice, teach me how to be an engineer. I don't care if it takes all day." And then adds greedily (as Alice is gritting her teeth), "but let's keep quiet about this. I don't want others to get in on this scam."
try cs50.tv it's harvard's introductory computer science class,
all the lectures and assignments are online and available free
its designed for non-techie beginner programmers and you'll learn a bit of C as well as some web development stuff later - MYSQL, PHP, HTML etc...
They are awesome! I've ported some of my stuff from matlab to both python(with scipy) and vba in excel because matlab licenses don't fall from the sky like donuts. Speedwise the vba just blew the python away. That was not what I was expecting, and neither was the maturity and flexibility of vba as a language. The support for strict typing and the flexibility to use dynamic typing for instance. The support for OO is all there, as is the support for functional-style programing using immutable containers and functors/functoids. I was quite impressed.
To stay on-topic, the submitters real question was how to get small business owners who can't afford to hire IT support, to make their own webpages. Not having a website is a death blow to a modern small business, and if you can't afford it, then you are better off trying it yourself even if you don't get it right. The exception being support for actual financial transactions which should certainly be done by a proffesional or offloaded to an existing site devoted to the purpose.
refactor the law, its bloated, confusing and unmaintainable.
Learning to program for Non-Techie is easy. You have to let someone pay for your learning. That is, join a bank and be prepared to learn anything they need. You'll get to know COBOL very well as the all cracks are turning into pensioners, nobody does COBOL for fun and hence a lack of COBOL application programmers will be there.
You also will make a very decent salary as anything related to mainframes usually pays well.
Once you feel comfortable at programming, you move on to some other language you think you like.
I hadn't the slightest objection to his spending his time planning massacres for the bourgeoisie... (P.G. Wodehouse)
Ruby's performance is no good - it's worse than PHP. It's a frustration, but this is 2010 and performance is no longer the most important thing for a language to be useful and "general" (whatever that even means).
There are actually two answers:
programming in general or programming for the commercial web based market.
Your comments assume a commercial market.
However, I would suggest completely forgetting about PhP or SQL or Python or C/CC+ or Java. All of those languages do not get to the core of what constitutes good programming.
Only Nicklaus Wirth has endeavored to formulate precise syntax which is "As simple as possible, but not simple" for programming.
The evolution of his thinking can be found in the successive development of the languages:
Pascal, Modula, Oberon, Component Pascal, Oberon-7
Each has refined and strengthened the programming core.
I suggest that you start with the open source language Component Pascal and its development environment called BlackBox (everything is hidden unless you explicitly export it) produced by Oberon Microsystems Inc. http://www.oberon.ch/BlackBox
If you've never programmed before, then you will likely need to practice thinking in a logical, structured manner. Certainly, you should learn your first programming language while doing this, rather than take any kind of math/logic course. Unless, that is, you really like that sort of thing. Posters above me have suggested starting a project that you are motivated to complete, finding out what language is most suited to your goal, and learning it as you go. This can work, but you may hit a few road blocks:
To get around all of these potentials problems, I recommend the book Python for Software Design: How to Think like a Computer Scientist , which I used when I first learned to program, back when it had a different title. It is available for free here, under yet another title. It's positive attributes are that it uses Python, contains short problems at the end of each chapter (many with solutions and explanations), and explains various things about math, logic, and algorithms as it goes along. Python is a good first language because it doesn't get into details of hardware, it is interpreted rather than compiled (quicker feedback when you change something), and it has clear, simple syntax that enforces good style. If Python doesn't suit you for whatever reason, I would recommend that you seek out a book that professes to teach you how to think as well as how to program.
I have been assuming that you intended to self-teach, but an introductory computer science course at community college should also work. The quality of your education will depend upon your instructor, but that's not much different than picking up a book and hoping the author knows what he's talking about. I think Allen Downey does a good job, but that's just me.
If you do one of these things, learn a language, and it piques your interest, learning other languages is a good time to find a project you're interested in and learn the appropriate language as you go, already having the proper mindset and background under your belt.
This space reserved for administrative use.
Basic technological skills do not include programming, and I'll argue that Intermediate-level persons are better off without, as well.
Let's get your vocab enhanced by 30-50% with the terms involved, and we'll talk if you can actually grasp programming at a conceptual level.
Teach the 'gist' of computer programming through already familiar concepts - with BASIC if you like. See how many of your subjects are OK with not clicking something.
You're an artisan. As an artisan, you apprentice under a specialty with a short life, but exceedingly high payoff, which is it's own reward.
Increased tenure does not imply increased capability, unlike typical 'Professions', i.e., Plumber, Mechanic, Lawyer, Professor, Accountant, TV Producer..
Like the brick layer, you are a means to an end. A potentially cushy end, but an end nonetheless.
and it helps you skip that bottom rung (black hole) 'job' nonsense altogether.
Those who 'can', 'do'. Those who 'can't' deliver pizzas.
Thanks, that's sort of what I was looking for.
You should Learn you a Haskell for Great Good!
If you want to write programs, learn how to code, which means learning how to organize your ideas and then implement them in the syntax of the machine.
www.learnyouahaskell.com
People will tell you to learn the language they use for their job, which just makes you a crappy version of them. Become a hacker, learn something that is general and that nobody will pay you for, then use the perspective to recognize the limitations of other peoples approaches and be better than them for reasons they cannot understand.
If you want a job as a programmer, learn java or .net or whatever. It's like learning music with an electric guitar - you can sound like everyone else in a week, but you probably won't ever understand music well enough to create something valuable.
I'll probably be vilified for this, but if you are using Windows (or Mac), try Game Maker (Mac version is beta). It's a good introduction to a lot of programming concepts using a construction set like metaphor. After you learn the basics, it's easy to move to just code. Game Maker is free, many schools use it, and it was developed by university professor as a teaching aid.
http://www.yoyogames.com/make
Read the manual, do the tutorials, work your way up to GML code, take your questions to the GMC forums. Once you learn GML (which is similar to C and PHP, but allows Pascal style code as well), you'll be able to pick up other languages easily. Most programming languages are very similar.
There is also a book, The Game Maker's Apprentice, if you feel the need to purchase something.
http://book.gamemaker.nl/
+0 Meh
IF you want to know the inner workings of computers I recommend the book Assembly as a first language.
If you want to start with higher level languages MIT Press put there book "How To Design Programs", which uses DrScheme, a Lisp dialect used for teaching programming, online at htdp.org
P2P Anonymous Distributed Web Search: http://www.yacy.net/
To learn web development, knowing HTML CSS JavaScript PHP MySQL, your Web Server, keeping Security in mind, getting to know CMS systems and similar frameworks, understanding your Audience and Graphic Design theory and software, then giving professional text content of what will be eventually written, can take you several years!
In your situation, I'd recommend a kit car project from one of the more reputable kit car companies. You start with a 70's era VW Beetle chassis and engine (or, if you can afford it, a 90's era Mexican VW Beetle chassis -- less rust and wear). You fix anything broken on the engine, using a good, accurate repair guide. Then, using the instructions in the kit, you put the car together, testing and calibrating after each step.
Once you've got all the under-the-hood stuff done, you can work on the body and getting it looking good. After that, a final detailed inspection and testing phase will make sure it is road-worthy. Once this is accomplished, you can get it registered with the proper authority and put it into service as a working vehicle.
Optional: You can learn how turbochargers, aggressive suspension and other performance-enhancing technologies work, and apply to your original car or a subsequent car to really amp up your speed and handling.
Your first car will take several weeks or perhaps months from start to finish; you will be learning as you go along. If you decide to continue building cars past meeting your initial needs, you will find the process will be much smoother and take much less time, even if the next project is a different kind of car altogether.
--
Now, replace references to learning mechanical skills with learning a programming language, via starting with an existing small open source project. Who says car-computer analogies aren't accurate?
If numbers are important in your job, you should learn the most popular of all programming languages: Spreadsheet.
Don't
Real programmers would spend mindless hours figuring out why did someone wanted to program without really having idea about it.
They will not fix it, but simply re-write it.
Please don't.
Software is loaded and it is dangerous. Don't play with it.
Real hackers will spend a few minutes figuring out how to turn your poor programing into a weapon.
They will exploit it.
When people ask me what I do for a living, and I say I am a programmer, usually I get fairly common replies that I'm sure most of us here get. Sometimes I am asked, "Can you teach me?" It's as if it is some easy thing I can supply to them some afternoon. I probably could teach them, but I think programming is about self-motivation, knowing how you learn information, and where to find information. /. does not magically impart unto you the wisdom of programming. Get a book or start googling, and go. Make sure that you have a specific goal and a specific job field in mind, as what you have provided is vague.
While Programming / Software Development is something a hobbyist can easily pick up, if you want to really build functional applications it is not a skill that you can partially learn.
I think programming is very easy to learn, but you have to be willing to commit to really learning how to properly develop applications and become a true software engineer in the sense that you can write good quality code. This is something that takes a combination of motivation, perseverance and experience. Ultimately that means you have to invest a lot of time. Unlike learning how to use particular applications or become more technically knowledgable about using computers, you have to have a very deep understanding of computing and software from the perspective of people that build computers and software.
That said I really wouldn't want to discourage anyone from trying, just to warn them that they should consider what it is they actually want to achieve. I have seen this all to often amongst peers at university who dropped out after the first year and well into the second year of a CS degree. They really did think they could get by without becoming a good programmer, and I can't say I blame them because in my experience very few people warn you going into a CS degree that it is going to involve a lot of programming and you may as well get used to it. Business / IS and IT degrees are a whole different story though.
Good luck to anyone venturing out into trying programming though, I think and hope the demographic of good programmers will become much more varied in the near future.
I started with HTML and wrote a few simple pages but then realized it wasn't real programming so I looked for an easy entry.
I wanted to start with C or C++ but 3 books and multiple frustrations with compilers, memory management, and editors later, I discovered Chris Pine's Learn to Program, a beginner book for teaching Ruby to kids. It starts you out with a with getting your editor up and running and dives into Hello World! With 1 line of code! Talk about motivating!!! The exercises are simple, easy and to the point. You learn basic syntax, loops, arrays and iterations, classes, methods, recursive calls, and variable types (string, number etc). By the end of 80 pages, you are ready to get real work done!
I would recommend starting with any scripting language (Ruby would be my first choice just because that book made it so damn easy) just to get the basics down without worrying about GC and so forth. From there, it is a matter of figuring out what you want to do, then use that scripting language unless it doesn't fit what you want it to do.
With that 80 page foundation, you can go after a different interepreted language or start to tackle something like C or java.
Ruby's performance is no good - it's worse than PHP.
No, it's not. Rails may be worse than vanilla PHP, but Ruby is not worse than PHP, and Rails is significantly better than CakePHP.
Don't thank God, thank a doctor!
Ruby is one of those languages that you learn in addition to another more general language.
Define "general"?
Go is interesting, but also incredibly new, and positions itself as "a systems programming language". Not all programming is systems programming.
V8 is hardly general-purpose -- node.js is interesting, and not the only example, but it also lacks the kind of libraries and bindings you'd expect from a more mature language, at least for that purpose. The biggest problem I have with V8 is the lack of good concurrency primitives, even cooperative multitasking -- it seems to be impossible to pause execution in the middle of a function. (This is, in fact, specific to V8 -- other implementations of JavaScript can do that.)
Lua is designed as a scripting extension to programs written in other languages -- something other languages, like Python and Ruby, can do just as well.
Racket is likely the closest you've suggested, but as a Lisp, it fails in at least one respect: Most people are not likely to be able to pick it up easily, which makes it a difficult choice for, say, a large open source project, or an open source project we would like to become large.
Ruby has much easier syntax, all sorts of Lisp-y features (closures and metaprogramming are easy), all sorts of native bindings (and they're easy to write), and a "killer app" on top of it all. The only thing it's missing as a "general" language is performance, and it's not bad.
Don't thank God, thank a doctor!
It will end bad. Do what you do for other services, hire someone.
It's like saying how can a non engineer build a bridge? to which I would say, don't.
The Kruger Dunning explains most post on
My friend, search and replace are doctoral level research projects. Take google for example. It is the cutting edge of computer science. Stupid tasks would consist of sending all clients on your contact list an invitation to your shiny new website using excel and mail merge :)
Where is the "Ignorant" mod tag?
Sure, but let me ask you this. Are you going to put any client and/or financial data on your internal site? Further more, can you trust your employees with your business? If there are no client/financial data involved or you can vouch for each and every one of your employees, the by all means. Let me point out one thing, SQL injection happens. Tread with care.
Where is the "Ignorant" mod tag?
If you can't trust your employees, you should either fire them or not give them the password to the computer.
I'll give you my for-instance. I'm trying to track patient movement through an outpatient surgery center. I want to know when they enter the operating room, when they leave the room, who their surgeon was, and what the CPT code was (identifies the surgery being done). I don't care who the patient is, so there's no protected health information involved. I've already got someone recording this on paper, but I'm not going to grant her general write access to the Google Docs spreadsheet that I'm using to maintain data. I just want an easy way to get the data she's already collecting entered into a spreadsheet for me. If I could make it a 10-second task for her, she'll do it for me as a favor.
Ask quickOnTheUptake to prove he has actual pro experience and also degrees in computer science, let alone if he has been noted as outstanding in this science in publication or trade shows. He does not and has not, and he cannot even prove he's someone credible to take advisement from on this subject in any capacity whatsoever, and on any of those accounts. quickOnTheUptake is just another wanna be bullshit artist who wastes his life on this website posting his no real world experience so-called 'advice' which isn't worth a wooden nickel.