Fog Creek Software
Discussion Board

I want out writing web/database applications

But I have no idea what other kinds of programming I could move to.

I'm very bored with building UIs that hit databases. I have a lot of database design experience (but I'm not that great at it), a lot of OOP background.

I just think that my area of "expertise", which is web applications that depend on databases, is becoming marginalized and in order for me to stay in the IT field I need to learn something more challenging.

Does the world really need another boring business app?  Probably, but I don't want to build them anymore.

My degree is liberal arts, so I don't have a hardcord compsci background, either. 

I have no idea what else would be interesting besides graphics programming, but without hardcore math background, I'm afraid I'm not qualified. 

Any suggestions?

Monday, August 30, 2004

I'd have to disagree.

I think that far too many of all these apps are BAD, BAD, BAD.

I also think there's a whole lotta room for improvement.

But I can agree that it's quite easy to make stupid boring web apps that do x,y,z.  So, what I do is I write scripts that automate the boring part of those things, as much as possible. The whole point of the computer is to automate the rote and free the human for the creative.

However, I think you will find that if you work with people who have no imagination or vision then everything is pretty boring.

Luckily I'm pretty much left alone to develop as I want. I wish I could work more in tandem with my fellow developers but they prefer to repeat what they did yesterday. Every app I develop is different in some (and hopefully better way) than yesterday.

Monday, August 30, 2004

Oh, btw, for a suggestion.

I have old computes laying around waiting to be put to some use.

I recently bought TIVO.

I'd like to be able to use one of my old computers as a dedicated device to seek out, store and serve broadcasts that are on the net. I'd connect to it via (oh schucks, a web server but you could write it in LISP for all I care) the web (or you could write some buggy gui) and see what's out there and when and I have it retrieve any time dependent broadcasts or show me links to exising broadcasts.

I've seen some apps that purport to do something like this but they require my desktop computer and I don't like them. 

Anyhow, I think there might be something in putting all these old computers to use.

Monday, August 30, 2004

I'm in the same boat, re: being bored, but this work isn't going anywhere, in fact it's just growing.

And the poster above who says 99% of these apps are garbage is right too.  And, 99% of the devs who write these apps can't perform basic project management and customer service / support tasks, so that's another huge area to exploit.

I am well-compensated for this stuff because my employer recognizes the value of a self-motivated / self-managing developer who can automate their business processes.

That being said, I take C/C++ classes at night.  C# was fun for about 5 weeks.

Monday, August 30, 2004

If you don't like what you are doing during the day, do something you *want* to work on at night.

Like, seriously, if you want to do graphics, teach it to yourself by making something big and impressive.

Just don't be surprised if you find that the field of graphics isn't nearly as fun as you thought it would be.

Flamebait Sr.
Monday, August 30, 2004

Yeah I know the feeling. A few ideas:

For the meantime try and write smart code that abstracts away all the boring bits. Take it to the point where you can rattle off a several-grand database web app in a few days. Nice!

Have you done much desktop/GUI programming before? if not try learning wxPython, it's really easy and nice.

Or: try learn some AI stuff and try and get some projects you can build some real 'smartness' into.

Or: yeah graphics music etc. Expect to need some maths for this though... really to write interesting code in more advanced areas you do need the background. It's the kinda stuff you can teach yourself though if you're interested.

Monday, August 30, 2004

The graphics stuff is really not that hard, although obviously it takes work to understand anything -- but if you're motivated it's typically fairly easy to pick up.

A good start would be to read through "Computer Graphics: Principles and Practice" and do the exercises in the chapters that interest you.

There's a lot of room for specialization in graphics, as in a number of other areas in this business.  Find something that actually interests you and follow what's most fun to you -- you'll naturally fall into a specialty that you enjoy.

Monday, August 30, 2004

>My degree is liberal arts, so I don't have a hardcord compsci background, either. 

Then you're not really qualified for making anything except UIs that hit databases, at least not until you've gone back and learned a lot more than just computer languages.

Unfortunately for most of the self-taught professionals, knowing a computer language or two doesn't make you an engineer any more than knowing how to speak English makes you a novelist.

Neither you nor I would trust our lives to a bridge, automobile, or aircraft whose parts were designed by a "self-taught" mechanical engineer. Yet to ask anyone to trust a system for any serious purpose built by a self-taught programmer is to request that they do the equivalent.

This is not to say that you are useless, or stuck, or that you cannot ever do anything but e-commerce websites. But you must realize that experience is not a substitute for the specific knowledge you need, and that specific knowledge comes from learning at least some parts of computer science.

Here is my opinion of what the "short list" that makes a real programmer is composed of:
A serious computer language (No, PHP will not do. Neither will Java or visual Basic. These are fine tools to build things with once you understand the principles that a lower-level language teaches. But they do too many things for you to allow you to truly learn what's going on.)

A nodding familarity with assembly language. (At least enough so that you understand 2's complement, use of registers, activation frames and the execution stack, and so on.)

Object-oriented design.

Complexity analysis ( O(x), o(x), theta(x), etc, including analysis of recursive functions. This is basic stuff.)

Basic data structures ( linked lists, square lists, stacks, queues, hash tables, heaps, graphs, binary trees, n-ary trees, balanced trees (AVL, red/black, etc)).

Basic algorithms (Binary search, heap- and quicksort, KMP string-matching, Dijkstra's algorithm,  reisdual flow, etc) and algorithmic principles (greedy, divide and conquer, recursion vs iteration, dynamic programming).

Discrete mathematics and combinatorics.

Finite automata.

Regular and context-free languages.

Some familiarity with computability and complexity theory.

An understanding of concurrency and synchronization (spinlocks and semaphores, the Lamport Bakery Algorithm).

Some clue how compilers work (ASTs and symbol tables, lexical, syntactic, and semantic analysis. Ideally, try writing one at least once.)

Nice-but-not-necessary are such things as AI basics (A* search, classifiers, optimizers and simulated annealing, etc.), microarchitecture, linear algerbra, and so on, and so on, and so on.

I know all of this sounds like a tall order, and truly, to learn all of that pretty much involves getting a bachelor's degree in computer science, so you probably won't be teaching yourself all of that. But the major point here is that there *is* a lot to know. It's not just a matter of getting an O'Reilly guide or two and going for it.

If you're serious, however, you'll find the effort of learning real computer science to be worthwhile in the long run.

Devon Grey
Monday, August 30, 2004

Devon - your reality check is in the mail.  :-)

Monday, August 30, 2004

Devon --

Thanks, I think.

I think I've just been insulted. You assume I haven't studied those appropriate subjects after all of these years in IT, and you also assume I haven't taken computer science courses.

I have done both, in depth.  I'm no expert, but in reality, none of the software engineers that work in the business world know any of that stuff in depth.

I'm going to say that you are a tad biased. 

Every single bona fide MSCS program requires data structures/algorithms, discrete structures, computer architecture/assembly language, and a year of Calculus or something.  I've studied all of these on my own and in some cases I have taken a course.

I just don't have the "credential".

Monday, August 30, 2004

I forgot to mention that I have Java, C#, and C++ experience (not used much in business apps anymore).

Monday, August 30, 2004

Matt -

I fiddled with Lisp a bit in order to see if I could write an expert system.  I will consider the AI stuff again.  I think I got off track because I had to learn some new stuff for work, and it got difficult to learn another language in my off time.  A little discipline goes a long way.

Monday, August 30, 2004

I have written extensive middle-tier, OOP code for business apps.

Is there a way to leverage my OOP experience into some other area?

I find that using the Design Patterns really ruins the fun of discovery...everything in OOP for business systems has been done before  (eh, Devon?).  But the skill might be usefully applied to something besides managing relational data.

I find that anyone can do OOP and design, if you apply yourself.  The hard part is disciplined coding such that you refactor as necessary...

Monday, August 30, 2004

Devon's right.  Make sure that you're fully prepared for the traditional old fart penis-measuring contest.  If you don't know how to create a doubly linked list from scratch in assembly language, then you're not a real developer.  Be sure to fill up your head with rhetoric and minutae so that you can appear to know what the fuck you're talking about in tech meetings while remaining totally incapable of innovation.

Don't try to ride a bicycle without first learning the intimate details of carving your own wagon wheels from stone.

Monday, August 30, 2004

"However, I think you will find that if you work with people who have no imagination or vision then everything is pretty boring."

Yeah.  I'm the one that comes up with all the ideas where I work.  I get so tired of being the leader.  I want to follow...! 

Monday, August 30, 2004

"none of the software engineers that work in the business world know any of that stuff in depth."

I would say YOU'RE a 'tad biased'...

Monday, August 30, 2004

I should have said "at the 6 companies I worked at as a programmer and the 4 companies I sold software for (meaning I visited hundreds of shops for which I sold development tools that wrote business applications), only one had those kind of software engineers."

The one company with the bona fide software engineers was/is a statistical software company, so they were also Master's level statisticians.

Monday, August 30, 2004

+++Don't try to ride a bicycle without first learning the intimate details of carving your own wagon wheels from stone+++

Muppet, so you do not have a formal education?

Tuesday, August 31, 2004

I have a GED.

Tuesday, August 31, 2004

If you have strong C/C++ backgroud, you can work for  a hardware company or a game vendor?

Now I am working for a fortune500 company on a image-processing (for hollywood?) project.

It's also boring because our consultant use so many design patterns and seems that he do like delicate designs.

For example, I had to spend one month to perfect my logging class (100 lines of C++ code) to meet his desire for delicate design.

I guess maybe you need not much math knowledge if you just want to get a job on graphic programming (a little experience on your resume needed).

Some programmers who even lacking basic knowledge of C programming are taking graphic programming jobs here.

maybe you can just turn to a small company to gain some experience at first.

D2KSoft, Different and Elegant

Tuesday, August 31, 2004

The problem, as I understand it, is not so much that you are bored with the applications you are doing but that no one wants to play with you.  You are playing on your own because you're the one coming up with the ideas and then implementing them.  After a while all the gumption runs out.

So, somehow, you need to get the people you work with to play with you.  Perhaps the first step in doing that is to forget that its a UI front end to a database, because that rut is very deep and remember that its software and that software is plastic, possibly the most plastic substance and process we have.

So play with it.

Simon Lucy
Tuesday, August 31, 2004

Hmmm. I seem to have touched a nerve.

My purpose was to emphasize that:

1. There is a lot to learn beyond simply programming languages and APIs.

2. It's important to learn it.

You see, programming isn't like riding bicycles. It's more analogous to designing and building them.

You *could* simply buy yourself some metalworking tools and go at it, but you'd make lousy bicycles.

Learning how to weld, how to bend tubing, about gear ratios, and so forth would probably see you through much better. It might even be useful to learn something about historical bicycle designs, about the physical properties of titanium, steel, and aluminium, and probably a bunch of other things that I don't know enough about building bicycles to name.

The thing that disturbs me is that the essential knowledge I spoke of is often characterized as "old".

This, however, is inaccurate, because these things are still in use, and will not be otherwise in the foreseeable future. The fact that one possesses a tool which partially automates some of these tasks does not mean that they have gone away, or that one may safely be ignorant of them.

Not long ago, I met a man at a party who tried to tell me that "pointers were obsolete". It would have been funny if he hadn't been a teacher of programming in a local adult-education school. As such, it was frightening.

This is a common and disturbing tend. Software engineering is becoming more and more important as the design productivity gap widens. Bugs are no longer just an expensive annoyance, but can now be a lethal threat as society's critical support systems have become computerized. And yet people are insisting that programmers need less education than ever before.

Devon Grey
Tuesday, August 31, 2004

Pointers will be obsolete.  Nobody spends much time on memory management anymore, and soon it won't be necessary to do it at all.  Of course there will be purists who will do it anyway, but they'll be spinning their wheels while other developers who don't bother trump them.

And no, it's nothing like building bicycles.  The learning curve is MUCH shallower for programming, the price-of-entry much lower.  Sorry Devon, but the days of compiler tricks and understanding low-level binary operations down to where the bits are located on the disk are over.

Stings, don't it?

Tuesday, August 31, 2004

"I think I've just been insulted. "

No, you've just been trolled. Ignore them.

Anony Coward
Tuesday, August 31, 2004

Actually, I'm in the same boat as bored, but I think the more pertinent question is what other types of programming can you do and make a lving at? What is there demand for? Most of the places I see looking for people are doing web based apps. 

I certainly understand the attraction. Web based apps have a lot of advantages when it comes time to deploy/upgrade across the enterprise, but frankly, once you've written a dozen of them it gets to be rather old.

Steve Barbour
Tuesday, August 31, 2004

That's the industry in a nutshell, though. Once you've written a dozen Web apps, you've done it all. Once you've written a dozen desktop apps, you've done that. Once you've written a dozen games, you've done that. And so on.

Trouble is, the value-added skills necessary for each major business thread take a while to learn, and employers are always going to look to hire people who already have them first, especially if you're anything more senior than a code money.

Take banking - it's seriously hard to make the move from, say, coding Web apps in retail to coding Web apps in banking, let alone a more radical move into back-end systems or middleware. Banks generally only want to hire people with banking experience, and until the labour market dries up and there's a shortage of programmers (it's actually starting to happen here in the UK, but I gather the market in the States is still flat) they won't look at anyone they have to train.

Perhaps the right course is to move out of coding boring Web apps and get into architecting boring Web apps, and then into managing people who build boring Web apps, and then into managing people who manage people who build boring Web apps, and so on. That seems to be the route an awful lot of people take. Or else quit and become a consultant :-)

Neil Hewitt
Tuesday, August 31, 2004

Oh, and to chip in on the whole Comp.Sci. thing - I think Devon's right, if a little over-the-top (I don't see myself needing to know much about combinatorics or finite automata any time soon). A thorough understanding of the fundamentals is a good thing, no matter what kind of coding you do.

I'm self-taught, but I started waaay back in the early 80s and (after the mandatory BASIC) taught myself assembler long before I hit the likes of C and it was many years before I went OO. Over the years, I've done enough actual coding (and read enough comp.sci. books) to have covered at least 2/3 of the syllabus of your average comp.sci. course. Plus of course I have many years of experience that your average graduate doesn't.

I do have to disagree with the statement that 'experience is not a substitute for the specific knowledge you need, and that specific knowledge comes from learning at least some parts of computer science', though. Experience is a perfectly good substitute for formal learning. If it weren't, the skills of craftsmen would have died out after the first generation. It's a bit like learning a language - just because you don't know what an adverb is doesn't mean you can't use one with just as much skill as someone with a formal training in the language.

Neil Hewitt
Tuesday, August 31, 2004

If someone tells you pointers are obsolete at a party is frighening, but what is frightiening is the thought that people go to parties to talk about pointers.

Stephen Jones
Tuesday, August 31, 2004

I'm enormously glad no one invites me to parties.

Simon Lucy
Tuesday, August 31, 2004

*  Recent Topics

*  Fog Creek Home