For Web development on Windows, that is a good list of a minimal list of EXACTLY what is needed. Web development on Windows is JUST what I'm doing, and that list of topics is JUST what is centrally involved.
What are you going to leave out? T-SQL? OS backup and recovery? Good skills with an IDE or editor?
Yes, learning most of, say, Visual Basic by itself is easy. The 'rub' is that for anything at all serious in Web development or just software development, it is just crucial to make good use of .NET, and that is HUGE. For a long time, nearly each time you turn around, you will need to use another .NET class, and that will take you 1-3 dozen Web pages at MSDN to find, download, save, index, abstract, and read. The total of MSDN Web pages needed adds up quickly: I have over 2500 now, and it grows quickly. Just yesterday I downloaded a lot just for 'request data validation'. Before that, the topics were HtmlEncode and UriEncode. Before that, TCP/IP sockets. Before that, Windows Communications Foundation. Before that Windows 'remoting'. Before that, Windows remote procedure call. Before that, a LOT on SQL Server administration and mangement. And on and on and on. It's ENORMOUS.
All you need at first is something you can type text into that knows how to highlight syntax. You don't even need to know the features of that particular editor, aside from stuff like "save" and "open".
> and a scripting language.
For what, exactly?
> And need to get good with Windows, e.g., have traversed much of the obscure tree of things to click on. And need to be good at software installation
Why? How does this actually help? How is this actually difficult?
> Should learn some Word, Excel, and PowerPoint.
None of that has anything to do with programming. And how is this actually difficult?
> Should learn some T-SQL, HTML, CSS, ASP.NET, and ADO.NET.
Well, you need HTML and CSS for sure, and you need SQL. And I think you're going about it the wrong way if you try and comprehensively read and memorize the API documentation for every single framework call you make. Any programmer looks up what he needs on a case by case basis and over time comes to remember the stuff he uses a lot.
But I think you're just making it harder on yourself using the Microsoft stack. There are, believe it or not, entire web development frameworks where you don't actually need to manage the TCP/IP sockets yourself.
> Also need to be good at backup and recovery, ESPECIALLY of the operating system and boot drive.
This is part of owning a computer, not programming. It's also not difficult.
"I want to start a startup, but I don't know how to program. How long will it take to learn?"
So, he wants to "learn" "how to program". Good objective, clearly stated.
For your
"All you need at first is something you can type text into that knows how to highlight syntax. You don't even need to know the features of that particular editor, aside from stuff like 'save' and 'open'."
Your
"All you need at first"
is not very relevant to the clearly stated objective of learn to program for a startup. You just ran off the subject to try to find something to object to.
From your statement, it would appear that even Notepad would be sufficient, but it is not. Instead for anything productive even just in the learning, what I wrote is on the center of the target.
Actually, the editor I use, KEdit, does know "how to highlight syntax", and I think so little of that I keep it turned off and don't use it. I didn't go into what makes a good editor or IDE, but there's a LOT to it even when "how to highlight syntax" doesn't make the list.
For your
"> and a scripting language.
For what, exactly?"
If not using an IDE, then need a scripting language for common tasks otherwise done by the IDE. Or maybe you would expect the poor student to type
C:\Microsoft.NET\Framework\v2.0.50727\vbc.exe
each time they wanted to do a Visual Basic compile? For the Microsoft C/C++ compilers used outside of an IDE, generally need to set up a lot of environment variables, and want those in a script. Once actually see how to build a DLL, want that in a script so have some good documentation of just what did and don't have to look it up, make it work, and type it in all over again. For running T-SQL, don't want to type in C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE
so want that in a script, along with some more options. And DO want to do a LOT with T-SQL instead of, say, SQL Server Management Studio (SSMS) because (1) the documentation of T-SQL is much better, (2) get an explicit record of just what did, (3) get to put comments in the file with the T-SQL (no place for comments when using a GUI) so that six months later can understand what did, (4) some of the most competent documentation for how to do system management and administration of SQL Server is in terms of T-SQL and not clicks on SSMS.What I wrote is correct: If don't depend on an IDE for essentially everything in the development, then need a scripting language.
For
"> And need to get good with Windows, e.g., have traversed much of the obscure tree of things to click on. And need to be good at software installation
Why? How does this actually help? How is this actually difficult?"
If get very far with it, then it's horrendous. The clicking and clicking and clicking goes on and on. There's next to nothing good in documentation. Much of what need to learn is just by trying, e.g., for everything in sight on the screen right click, left click, double right click, double left click and see what the heck happens.
"> Should learn some Word, Excel, and PowerPoint.
None of that has anything to do with programming. And how is this actually difficult?"
If they don't know how to program, then maybe they won't know these tools, either. If they are doing a startup, then they should know them. Word is a pain in the back side, very poorly documented, and commonly takes about two weeks to get good enough to do, say, a document good enough to be, say, a 'business plan' or a report to the Board. Similarly for writing letters to the government, lawyers, etc.
Excel, if get far enough to do some financial projections for fund raising or the Board the first time takes some days or weeks.
Once are okay with Word and Excel, then PowerPoint can go quickly, say, the first good 'foil deck' takes a few days wrestling with PowerPoint.
And I omitted Outlook: Back when I was on OS/2, I wrote my own POP3 e-mail and used it for years as a great tool. But with Outlook, I commonly yell and scream myself hoarse in frustration. Outlook is awash in serious problems: E.g., the PST files are by default in a hidden directory deep in the directory tree on the boot drive; takes a while to discover this and how to put the PST files in a decent place. "Decent"? Yes: DO want to backup the PST files as part of daily incremental backup, but do NOT want the boot partition as part of the daily incremental backup. So, have to get the Outlook PST files OFF the boot partition. Next, starting a new PST file commonly causes Outlook to lose the Contact List, and to get back the list have to discover a certain Web page at Microsoft and go through an obscure dance of about 12 steps. If have more than one PST file seen by Outlook, then on each use of Outlook it will set the archive bits of all the PST files so that they all get backup in incremental backup. So need to find a workaround or can have the daily incremental backup start at 500 MB or so. The options in Outlook are horrendous to get set appropriately; I finally traversed the whole tree of menus, set everything, and documented each click. We're talking DAYS of work. It's super tough to find old e-mail in Outlook. And those are just some of the problems; I omitted security issues and much more.
"And I think you're going about it the wrong way if you try and comprehensively read and memorize the API documentation for every single framework call you make. Any programmer looks up what he needs on a case by case basis and over time comes to remember the stuff he uses a lot."
I wrote nothing that suggested I "comprehensively read and memorize ..." You are straining to get off the subject to find things to criticize. Indeed, I wrote that I "index, abstract" the documentation, of course "to look up" as needed. Still, at least the first time, have to read the pages downloaded. And, again, to get very far with the goal
"I want to start a startup, but I don't know how to program. How long will it take to learn?"
especially for "a startup", really WILL need MORE than 2500 such Web pages. To pull this all off in one year, we're talking ballpark 10 Web pages a day, on top of the rest. It's beginning to look like a busy year.
For
"But I think you're just making it harder on yourself using the Microsoft stack."
there are pros and cons going with Microsoft. While there are alternatives, net it's not a bad decision. It's not the more popular decision here at HN, but it's still okay, and it's the one I selected so can write about. If some alternatives are much faster, fine, but for the goal
"I want to start a startup, but I don't know how to program. How long will it take to learn?"
especially for "a startup", my main point is correct: Going with Microsoft, one year is FAST.
For
"> Also need to be good at backup and recovery, ESPECIALLY of the operating system and boot drive.
This is part of owning a computer, not programming. It's also not difficult."
It's also commonly neglected, especially by people who are not yet deep enough into computing to program. So, it is reasonable to believe that the person might have to learn. For a startup, it's IMPORTANT.
And, as I wrote, for
ESPECIALLY of the operating system and boot drive
it IS difficult. It's a self-inflicted, unanesthetized root canal procedure, at least.
Oh, it's easy if don't do it. And it's easy if do it but don't test to see if it actually works, that is, results in a bootable partition with everything back where it was. But if do it and confirm that it actually works, then it's TOUGH. Just the testing requires running experiments where have to reinstall the OS, likely several times.
There may be some easy ways to proceed, with some special third party programs or some newer versions of Windows, but for XP SP3 and using NTBACKUP, we're DEFINITELY talking a self-inflicted, unanesthetized root canal procedure, at least. Why? The relevant documentation for NTBACKUP totally sucks: About all a user can do is just guess and try. Getting a good solution to backup and restore of a bootable XP SP3 partition with NTBACKUP is a real accomplishment, 1-2 weeks of work. But NTBACKUP does have some highly desirable functionality: It can do a 'shadow copy' where it backs up the boot partition while the partition is booted and running. And it can restore to another disk partition (with the same drive letter) of a different size.
As I discovered the hard way, the testing to be sure the are doing the backup so that a restored partition actually is bootable is just CRUCIAL.
Actually, in the end, NTBACKUP can be okay, but the documentation is so bad that lots of experiments are needed to get the procedure working correctly and test it to be sure it is working correctly. The main problem is just the documentation. If someone hands you some good documentation, say, in a well documented script, then you can be okay right away. Then you can save 1-2 weeks.
Here's how I solved the backup problem: I bought an external hard drive, connected it to my Mac, and clicked "yes" when my Mac asked if I wanted to use it for backups. Here's how I solved my email problem: I set up Google Apps on my domain, which took a total of maybe 30 minutes (though I'm sure you'd go through and document every single click it took to configure the DNS settings). Here's how I got my first editor: I got TextMate and started using it, and was productive from the first second. As far as scripting languages for building code, I think I learned how to use make and that's about it. That's all I needed to do to be productive. I can, and in many cases have, wasted time wanking over configuring everything in finer detail, but that's not a useful mentality.
It's probably not even about Microsoft at this point. There are lots of programmers who are productive on Microsoft (though I've never met a serious programmer who actually uses Visual Basic). You just don't seem to be one of them if it's as much of an ordeal for you as you make it out to be.
Everything I said is well informed and well justified.
While you were not clear on just what you did on a Mac, for your
"Here's how I solved the backup problem: I bought an external hard drive, connected it to my Mac, and clicked "yes" when my Mac asked if I wanted to use it for backups."
on Windows XP SP3 that in no way addresses the problem I explained now twice: Back up a bootable partition so that it can be restored and bootable.
One severe problem with such backup is backing up a booted partition as it is running. As I explained, NTBACKUP has this problem solved, with 'volume shadow copy', but the solution is involved. You didn't describe how Mac has this problem solved.
As I explained, the problem with NTBACKUP is the documentation and getting the options so that the backup can be restored and be bootable. Due to the documentation problems, that is NOT easy.
And once you have such a backup of a bootable partition, how do you restore it? I do have a solution, have tested it, and have shown that it WORKS.
Again, yet again, there can be solutions with third party software and/or versions of Windows after XP SP3, but for that version of Windows what I wrote is a very accurate description of what HAS to be done if just using Microsoft's software.
Your claim that I am making things too difficult in backup is just flatly WRONG -- uninformed, misinformed, and just plain WRONG.
For Outlook, your solution was to use gmail. That has some pros and cons, and I don't like the cons.
For writing down all the clicks in configuring Outlook, you don't have a better solution. There are a LOT of options for Outlook -- a LOT. Some of them are important for security. About the only way to get all the options right is to do JUST what I did. Security problems with bad options in e-mail programs have been grim for years; maybe most Outlook users without a support group to set all the options have some security holes.
Your claim that I am making things too difficult in Outlook is just flatly WRONG -- uninformed, misinformed, and just plain WRONG.
Heck, I even omitted describing setting options for Internet Explorer and Firefox. For Firefox, a default option is to PERMIT running Java in a Web page. OUTRAGEOUS security hole: Java can do ANYTHING. If a user is not REALLY careful with Firefox options, then they will have Java enabled.
Your
"though I've never met a serious programmer who actually uses Visual Basic"
taken literally means nothing but suggests something misinformed, uninformed, and just plain wrong: In fact, on Windows, the .NET version of Visual Basic is fine: It gives essentially full access to the basic 'common language runtime' (CLR) and .NET; it has full 'managed code' including its memory management; using another language on the CLR is mostly just a matter of different syntactic sugar. An advantage of Visual Basic is that the syntax is easy to read and not borrowed from the too sparse and idiosyncratic C/C++ tradition as in C#.
When I hire people, I will have them start on Visual Basic because it is easier to get going with than C#.
On Windows, what language would you use? C/C++? That's not Windows 'managed code', and managed code is IMPORTANT. So your main options will be C# or Visual Basic. You could use either one, but working for me I'd ask you to use Visual Basic. You would not be able to use C/C++.
Your claim that I am doing something wrong using Visual Basic .NET is just flatly WRONG -- uninformed, misinformed, and just plain WRONG.
For your
"I don't even know what you're talking about when you say you "index" and "abstract" API docs--I just keep them open in a browser window and search for things I don't remember offhand."
your confession that you don't know is on target. As I wrote, I have something over 2500 Web pages of Microsoft MSDN documentation. For those 2500 pages, what you described is not a solution. For a solution, my "index" and "abstract" are a good solution: So, I have some simple, 'flat ASCII' files. I have one for each of Visual Basic, Windows, ASP.NET, and SQL Server. Typically I have about two of these files open in my favorite editor. For an issue, say, about ASP.NET or related parts of .NET or communications, I start with the file for ASP.NET. In that file each Web page of documentation has a few lines. Some of the lines give the title of the Web page; another line gives the tree name of that Web page on my system; those two lines form the 'index' and are an appropriate use of 'index'. Also there are a few more lines that say a little more about what is in the page, typically copied from the first paragraph or two of the page. If the page is a good 'root' page for a larger topic, then that is noted. Those extra lines are the 'abstract'. And there can be some additional notes of mine.
To find something, I just use the 'locate' command of my editor. Then to open the Web page, in my editor I give one keystroke on the line with the tree name.
Works fine.
But there's no way, as you suggest, to have all 2500 Web page files open at once, and your solution said nothing about how to find the right one of the 2500 pages but my solution did. And there is no XP SP3 'search' function nearly as effective as what I have with the four files and my editor.
Your solution with 2500 Web pages would be much less productive, not more.
Same for using a weak editor, C/C++, MAKE instead of a scripting language, and more. And your suggestion for backup on XP SP3 has little chance of resulting in being able to restore the boot partition so that it will boot.
Your claim that I am doing something wrong with my indexing and abstracting of those 2500 Web pages is just flatly WRONG -- uninformed, misinformed, and just plain WRONG.
For your "ignorant", "irrational compulsion", "unproductive busywork", those are all insulting, uninformed, misinformed, and just plain WRONG.
Again, yet again, one more time, the original question, go back and read it for yourself, was:
"I want to start a startup, but I don't know how to program. How long will it take to learn?"
and you responded with
"That's all I needed to do to be productive"
which does not answer the original question.
E.g., you said nothing about SQL Server. Hmm .... So, yes, from a plugin in a Web browser, I got a virus. Right: Now I keep nearly all plugins disabled. Have to work at this since some software installs and enables browser plugins without notice. That virus was from one use of the Akamai download manager to get a PDF file on a motherboard from an Asus Web site. Bummer.
So, to be sure to solve the virus problem, I reinstalled Windows, Office .NET, TeX, SQL Server, etc.
Then I wanted SQL Server to read my old database, which was not on the boot drive and not damaged in the reinstallation. So, I used the T-SQL CREATE with ATTACH. This didn't work (for complicated reasons, not my fault). Finally, in trying to get SQL Server to use my old database, SQL Server got 'sick' and quit doing much of anything. So, I tried to uninstall SQL Server. It wouldn't. I tried to 'repair' it; it wouldn't repair. I tried to reinstall SQL Server; it wouldn't. Basically SQL Server had just wiped out my boot drive, and I had to start over with the boot drive. BUMMER.
Now I have a backup, bootable, of my boot partition with everything installed EXCEPT SQL Server so that if SQL Server ruins my boot partition again I will be able to restore the boot partition from just before SQL Server and then reinstall SQL Server. Some of what is important with Windows and SQL Server 'administration and management'.
Yes, I have more than one bootable partition!
One of the problems was that when I installed SQL Server as I had before the virus, what was installed was different -- strongly against my wishes, I ended up with two versions of SQL Server with 'side by side' installation. Well, apparently 'side by side' is just awash in bugs so that can't uninstall, repair, or reinstall.
I finally got through it, but it was NOT fast.
You didn't mention SQL Server. But for the original question, SQL Server or some substitute stands to be important.
So, what you are doing that is "productive" does not answer the original question. I answered the original question, and you didn't.
On what I'm doing, you are WRONG, consistently, 100% WRONG.
That's enough of responding to your errors.
"There are, believe it or not, entire web development frameworks where you don't actually need to manage the TCP/IP sockets yourself."
Actually, what I'm doing with TCP/IP is the easy way to proceed!
You interpreted what I wrote as working with TCP/IP for the Web page Internet communications. Sure, I let Windows and IIS handle that!
But, consider a Web page that needs to execute a SQL query. SQL Server runs in a different 'process', likely in a different address space, maybe on a different machine, real or virtual. So, how does the Web page communicate with SQL Server? Sure: That's already worked out by Microsoft. BUT: There IS communications, and it is 'asynchronous'.
Okay. What holds for a Web page getting to SQL Server can also hold for a Web page getting to some other software possibly particular to the Web site.
So, suppose the design of the Web site has a program that needs to run as a 'service' and be accessed from the Web pages 'asynchronously'. So, how to do that communications?
I looked into Windows 'remoting' (now considered obsolete by Microsoft), the Windows version of old remote procedure call (RPC), Windows Communications Foundation (WCF), Windows pipes (on the same machine), and old TCP/IP sockets. Just to investigate these may have involved over 100 Web pages at MSDN.
I settled on old TCP/IP sockets. For the data to be sent/received, to convert to/from instances of classes, I settled on 'serialization'.
So, I got (back) into TCP/IP sockets. I've done socket programming for over 20 years. To get started with sockets on Windows, I started with some simple socket code in the scripting language Rexx. I got both the 'client' and 'server' sides working with each other. Then I wrote the server side in Visual Basic .NET (the Microsoft 'managed code' version of their TCP/IP) and got that working with the client side code in Rexx. Then I wrote the client side code in VB.NET and got it working with the server side code in both Rexx and VB.NET.
Now the TCP/IP code is ready to drop into the VB Web page code and the VB 'remote server' code.
But using TCP/IP and serialization for this communications was the easy way.
Net, all your criticisms have turned out to be unjustified. I've done nothing wrong. What I wrote to begin with was right on target. Being so consistently wrong you should fear will hurt your credibility. It's not good to be so consistently wrong.
Surprise, there are more environments that you could do web development on and quite a few of them are a lot easier to master than the one you describe.
Also important is scalability. Some 'development environments' that are easy to get started with have bad reputations for 'scalability'.
Another practical issue is, is the guy just a developer in a group where he can draw on others in the group or is he really, now, and during most of his development, just one guy and not funded and has to do nearly everything alone? To do it all as just one guy means he needs to know a LOT about computing a bit far from just Web development alone.
Actually, I omitted a lot: For a Web startup, usually need something like relational database, e.g., SQL Server. If the startup gets very far into production, then he will need some background in SQL Server management and administration, e.g., performance, backup, and recovery, and I omitted such topics.
I gave a description of some of what is important if developing on Windows. Here at HN, Windows is not the most popular option. But if you have some alternatives in mind, then describe them,