4 ms·
Interesting thread. The tread is interesting to me because I'm a sole founder of a Web 2.0 startup with some relatively technical internals (in the server farm
by graycat 14y ago
Interesting thread. The tread is interesting to me
because I'm a sole founder of a Web 2.0 startup with
some relatively technical internals (in the server
farm only), and have done all the work from the
beginning to the present. If the startup works,
then I will have to hire.
But, for what is in the OP and this thread, I have a
different view.
Below I discuss the differences in three parts,
software development environment, teams, and
qualifications and add some comments at the end.
Software Development Environment.
I've been around computing for a long time, but I
skipped over the big growth in Unix/Linux and C++.
Instead my more serious software development has
been on IBM mainframes and now on Windows with
Visual Basic .NET, ASP.NET, ADO.NET, SQL Server,
etc.
Why Visual Basic .NET? It seems like the nicest way
to exploit Windows, the Microsoft Common Language
Runtime (CLR), and the .NET Framework (that is, the
enormous collection of classes), and work with the
rest of the Microsoft software for TCP/IP, SQL
Server, IIS, etc. The syntax of C# is too close to
that of C/C++ and, thus, is deliberately
'idiosyncratic' and 'tricky' and, thus, an obstacle
and error prone; the Visual Basic .NET syntax is
much easier to take. The idea of 'immutable'
strings, each with maximum length 2 GB or some such,
along with the ideas in 'managed code' and memory
management seem terrific for my applications level
programming.
I've always typed code into just a text editor, one
that permits writing good macros, the most capable I
had access to, done operations with just command
line scripts, never used an 'integrated development
environment' (IDE), and rarely used any interactive
debugging. Instead, I just put some checks into the
code, have the code write a lot of tracing data, and
then look at it with a text editor. Always worked
so far!
For my Visual Basic .NET code for my site's Web
pages, I'm just typing into ASP.NET without any
explicit use of model–view–controller (MVC) or other
Web site 'framework', whatever such a 'framework'
is! Once I looked at MVC for a few minutes, and it
seemed that some of my code is similar!
I looked at Visual Studio, didn't like the
documentation or the many small 'panels' all in one
window (instead of the 10-20 windows I use), never
saw a description of what they meant by 'dockable',
and concluded that my favorite text editor and some
command line scripts were more productive.
I've been surprised and pleased by how well Visual
Basic .NET works for Web page development on
Microsoft's Internet Information Server (ISS) --
e.g., just have a Web browser ask for the page using
the loop-back IP address, and IIS kicks off the
Visual Basic compiler, apparently for anything and
everything on the site that needs compiling, does
any 'link editing' on the fly or some such, and at
the bottom of the Web page gives, based on options
in the Web page code, lots of details on the
compiling. Generally, if there are no error
messages, then the Web page displays. It's nice.
Microsoft should explain it someplace!
So, I begin to conclude that the main things a
programmer needs are good versions of a text editor,
scripting language, programming language, and
documentation on these and the libraries, APIs, etc.
Teams.
I've done some software development in teams and
supervised some software development. In both
cases, the work went well with no attention at all
to formal methodology, 'team tools', 'repositories',
etc. In one case, I was one of a team of three
researchers in artificial intelligence at IBM's
Watson lab at Yorktown Heights, and we did research,
published papers, designed and developed software,
and our work resulted in two, shipped, commercial
IBM Program Products, IBM's highest quality software
product category. For one of these two the code
that was shipped was essentially just what we wrote.
In the other case, we did all the work except the
actual code was typed in by an outside company in
Taiwan.
In addition to our three researchers, and we all
wrote code, we had several programmers. Really, it
was a team of seven people. For a project that
small, the lack of formality worked fine.
Once I was the Chair of a computing committee for an
academic institution and, thus, in part a supervisor
of a computing group that served the institution.
We had several programmers, former students, with no
formality at all, and the work was terrific.
I've never seen any formal approach to code
'building', testing, test 'buckets', 'quality
assurance', etc., yet we had no problems.
So, I begin to conclude that for groups as small as
seven, with a good leader and some good people, can
do well with no formality at all. None. Zip,
zilch, zero.
Programmer Qualifications.
The people I've worked with have nearly always been
plenty bright, knew a lot, learned quickly, worked
hard, etc. And these people were selected with none
of the interviewing ideas in this thread.
Mostly the people were college graduates, but not
all; some of the people had technical Ph.D. degrees;
some were graduate students in technical programs and
part time.
It appeared that generally quite sufficient (but
usually more than necessary) qualifications were a
Ph.D. in pure/applied math or
theoretical/experimental physics, some good computer
usage experience, and some scientific/engineering
programming in two or more languages would be fine.
Then such a person could pick up Knuth's TACP,
Ullman on database or compiling, Sedgewick on
algorithms, artificial intelligence, 'machine
learning', the elementary
Thomas H. Cormen, Charles E. Leiserson, Ronald L.
Rivest, and Clifford Stein, 'Introduction to
Algorithms, Second Edition', The MIT Press
Cambridge.
etc. and zip through like reading a novel. Gee,
Knuth's TACP has a nice list of binomial and
combinatorial formulas, good coverage of heap sort
and the Gleason bound, B-trees, AVL trees, and
random number generation, and more that is useful
..., well, maybe if I got out my copies I could find
some more! Yes, he has a very clever presentation
of the fast Fourier transform, but the more
specialized sources, especially for signal
processing, are better even if less clever.
Gee, guys, there are more tough technical ideas in
several cases of just 30 pages in W. Rudin's books
than in some stacks of computer science texts. For
real technical creativity, R. Bland's proof in
linear programming totally blows the doors off
anything I've seen in Bachelor's or Master's level
computer science or suspect is there or saw in
technical talks at Yorktown Heights.
Yes there are some other hiring criteria, but they
are mostly by 'exception'. E.g., if a person
clearly has a personality problem that keeps them
from working effectively alone or with others, then
can't have that person around.
I begin to conclude that software is still a
relatively simple subject, and for hiring the
sufficient conditions I gave are fine.
For more:
More.
If I hire someone with a lot of 'skills' in tools
and procedures for team developed software and those
skills seem to be worthwhile, then that person could
be helpful and welcome!
Compensation.
For salary, guys, look, the first thing to check is,
does the job pay well enough to let you buy a house
and support a family in nice conditions?
Large Software Projects.
Next, I confess: I've never tried to debug or
modify a 500 KLOC 'code base' developed over 10
years by 20 programmers none of who are still there
with no documentation except some sparse comments in
the code. My view is that such code is not a
programming problem but a management problem: To
fix the problem, need a lot of time, money, and
people. Sorry 'bout that!
Training.
I've never seen anything very useful in formal
training. Have to accept that major fractions of
programmer time go to working through bad
documentation, learning new material, migrating to
newer tools, writing little tools, etc. For a
'training budget', no: Just budget the time along
with everything else; for travel and fees for formal
training sessions, sure, but likely mostly the
training should be in-house without flying across
the country, business class, limo service, fancy
hotel, rental car, big per diem, big training fees,
etc.
Security.
In some organizations, have to take security very
seriously. Might have to hire some outside firms
with tools, procedures, tests, etc. Okay, then do
that.
JavaScript.
So far have yet to write a single line of
JavaScript. But so far Microsoft is writing about
300 KB of it for me, and I have to suspect that I
could cut that down by a lot and, thus, save on
bandwidth. So, if I have to write some JavaScript,
then I will. That is, get some materials and/or
'training', learn some JavaScript, and write some.
Do something really complicated with JavaScript? I
want to try never to do that!
And I would generalize that approach to JavaScript
to nearly everything else in computing, for me and
any people I hire.
Writing.
Once someone in my company has spent a lot of time
and, thus, company funds, learning or doing
something that has some importance, then I will want
them to document what they learned or did so that
the company can have the work as a continually
valuable 'asset'. So, net, one of the better
abilities I want is the ability to write good
technical material. Being able to give a good
technical talk would also help.
Net.
Many organizations want a lot of detailed 'skills'
that I get by without and, thus, won't require in
people I hire. I prefer JIT skills -- learn the
stuff as needed.
- eppsilon 14y agoI appreciate that you posted this alternative opinion, but I found myself disagreeing with much of what you wrote. Why Visual Basic .NET? It seems like the nicest way to exploit Windows, the Microsoft Common Language Runtime (CLR), and the .NET Framework (that is, the enormous collection of classes), and work with the rest of the Microsoft software for TCP/IP, SQL Server, IIS, etc. The syntax of C# is too close to that of C/C++ and, thus, is deliberately 'idiosyncratic' and 'tricky' and, thus, an obstacle and error prone; the Visual Basic .NET syntax is much easier to take. I also work with the Microsoft stack, and I was surprised that you prefer VB over C#. I've used VB (briefly), and the syntax felt quite cumbersome compared to C# (which I use daily). What do you find "idiosyncratic" or "tricky" about C#? I've always typed code into just a text editor, one that permits writing good macros, the most capable I had access to, done operations with just command line scripts, never used an 'integrated development environment' (IDE), and rarely used any interactive debugging. Instead, I just put some checks into the code, have the code write a lot of tracing data, and then look at it with a text editor. Always worked so far! Before I switched to .NET and C#, I used Django and Python, so I have some experience with the more barebones development environment you seem to like. There are things about Visual Studio that bother me, but I have to say that it's really pretty good overall. I think IntelliSense and ReSharper save me far more time than macros could. Also, interactive debugging feels significantly nicer than printing values to the console or messing with lower-level debuggers like gdb/pdb. What text editor and scripts do you use that you find to be better than Visual Studio? For my Visual Basic .NET code for my site's Web pages, I'm just typing into ASP.NET without any explicit use of model–view–controller (MVC) or other Web site 'framework', whatever such a 'framework' is! Once I looked at MVC for a few minutes, and it seemed that some of my code is similar! How do you organize your code if you don't use MVC? It's a pretty well-regarded pattern; you may want to look at ASP.NET MVC or a similar framework. In both cases, the work went well with no attention at all to formal methodology, 'team tools', 'repositories', etc. ...I've never seen any formal approach to code 'building', testing, test 'buckets', 'quality assurance', etc., yet we had no problems. So, I begin to conclude that for groups as small as seven, with a good leader and some good people, can do well with no formality at all. None. Zip, zilch, zero. You don't use version control, bug tracking, feature planning, nightly builds, continuous integration...any of those? I would think a project without those essentials would be quite disorganized. It appeared that generally quite sufficient (but usually more than necessary) qualifications were a Ph.D. in pure/applied math or theoretical/experimental physics, some good computer usage experience, and some scientific/engineering programming in two or more languages would be fine. Then such a person could pick up [lots of computer science knowledge]. These requirements sound extremely high. Wouldn't someone with a recent B.S. in computer science or software engineering be significantly more prepared for the job (as well as less expensive to employ)? I begin to conclude that software is still a relatively simple subject.... I don't think this is the case at all. You can assemble a team of good developers, follow industry best practices, be blessed with a good product manager...and you still have to deal with bugs, tangled code, issues with libraries, changing requirements, architectural design problems, UX design failures, and so on. For salary, guys, look, the first thing to check is, does the job pay well enough to let you buy a house and support a family in nice conditions? Er, that doesn't sound all that good considering the level of demand there is for software developers. You need to at least match the average salary and benefits for the region and the skill level of the position. And you'll have to pay much more if you're serious about requiring Ph.Ds. I've never seen anything very useful in formal training. Have to accept that major fractions of programmer time go to working through bad documentation, learning new material, migrating to newer tools, writing little tools, etc. For a 'training budget', no: Just budget the time along with everything else; for travel and fees for formal training sessions, sure, but likely mostly the training should be in-house without flying across the country, business class, limo service, fancy hotel, rental car, big per diem, big training fees, etc. I don't think this is what is meant by "training". Learning new tools or libraries on the job is expected of most developers. Providing training means sending developers to conferences, buying them books on topics related to their work, allowing them to work with more experienced mentors, etc. Those things are really not that expensive considering the benefit you receive in improving your developers' skills. Do something really complicated with JavaScript? I want to try never to do that! ...And I would generalize that approach to JavaScript to nearly everything else in computing, for me and any people I hire. This seems like a very bad approach to use if you value improving your skills, gaining domain knowledge, or keeping up with industry trends. JavaScript in particular has been an area of incredible innovation in the past decade or so. Is it really worth avoiding just because it has some quirks? So, net, one of the better abilities I want is the ability to write good technical material. I somewhat agree. Developers should be able to clearly document their code through a combination of good formatting, useful comments, thoughtful naming of types and variables, and blocks of technical documentation (docstrings/XML documentation) where appropriate. But they shouldn't be doing the jobs of technical writers. Many organizations want a lot of detailed 'skills' that I get by without and, thus, won't require in people I hire. I prefer JIT skills -- learn the stuff as needed. This sounds good in theory, but I don't think it really works in practice. For most projects you need people to have certain skills or experience before they join the team...otherwise you'll spend most of your time reinventing wheels or teaching them the basics. For your web app startup, would you really hire someone who is intelligent and has credentials but has only a vague idea of how a web app works? Can you really expect them to just pick everything up as they go and still be a major contributor to the project?