last updated:06 Aug 2003 14:19 UK time
|
 |
|
(Comments added for week ending Sun 29 Jun 2003) | View Other Weeks
|
|
| PHP 5 beta 1 | Sun 29 Jun | John K. |
| PHP 5 beta 1 appared.
It seems they dropped support of MySQL because of a license issue. MySQL support can still be installed easily, but it no longer comes bundled with PHP 5.
PHP uses one type of open source license, and MySQL uses another type of open source license, and the two licenses seem to be, somehow, incompatible, or something.
Maybe from a legal point of view this is correct, but this is certainly going to hurt a lot of users of PHP, because many admins wont bother to install the MySQL extension, and many PHP scripts are written specifically to work with MySQL.
PHP 5 now pushes SQLite, a database engine that is embedded into PHP 5, and is ANSI SQL 92-compatible.
This is the kind of thing that ruins the managers and users trust in open source software.
Im not saying that it doesnt happen in the commercial software world, too, but it certainly happens a lot less!
Im very disappointed by what happened. |
| Sun 29 Jun | Mike Swieton | The flip side of that is this: if the open source community stops respecting their licenses, they give up any hope of getting anyone else to. Licensing issues are of critical importance to OSS land because it's the only protection they have against everything they've released being shanghaid.
They are moving to a less restrictive license here, so that is not entirely the case this time, but in general I think the general attitude is as stated. |
| Sun 29 Jun | John K. | You are right in a way, but I thought that the main goal of a software product should be to help the users.
How naive of me! :) |
| Sun 29 Jun | Tom Davies | In my experience, the majority of the web hosts I have requested to have install additional PHP extensions were very receptive and helpful. For instance, I was looking to switch hosts recently and asked if the PEAR and Smarty modules (which are not standard in PHP) were included. Of the 5 hosts I queried, only one actually had the modules installed, but 3 of the 4 remaining were willing to install 'any' module I requested.
In addition, most of the shared hosts provide mySql database access. Therefore, I would imagine that they would be obligated to include this additional mySql access to maintain backwards compatibility while upgrading PHP.
---Tom |
| Sun 29 Jun | Rodger Donaldson | Your summary of the scenario is entirely incorrect. They have stopped shipping, by default, the MySQL support libraries with the PHP distro, which they used to. You can still build PHP 5 with MySQL support if you roll your own.
And commercial vendors deprecate products all the time. It's hardly unusual. The sky is not falling. |
| Sun 29 Jun | Diego | Via the php|architect weblog:
'Zak Greant, MySQL community advocate, was kind enough to leave a comment on my blog yesterday providing a great amount of information regarding the whole MySQL/PHP hoopla.'
http://blogs.phparch.com/mt/archives/000019.html |
| Sun 29 Jun | John K. | > Your summary of the scenario is entirely incorrect.
> They have stopped shipping, by default, the MySQL
> support libraries with the PHP distro, which they used
> to. You can still build PHP 5 with MySQL support if
> you roll your own.
Yes, that is right. And Johny B. Admin from my local ISP will probably not bother to install it.
I had very bad experiences with asking admins to install ANYTHING on their shared hosting servers.
They seem to think everything is a possible security problem, OR (in very few cases) they are a bit incompetent and are afraid to install the extension.
But again, this may be just my experience.
> And commercial vendors deprecate products all the
> time. It's hardly unusual. The sky is not falling.
Yes, but in my experience 95% of the commercial vendors will not drop support for something without an advance warning of at least one year (and usually a lot more). |
| Sun 29 Jun | Philo | 'Yes, that is right. And Johny B. Admin from my local ISP will probably not bother to install it.'
Then get a new ISP. My last ISP agreed to install ActiveReports for me - that's a major install. If you're at an ISP that supports PHP but won't install the MySQL extensions, you need to shop around.
As for 'dropping support' - there's a difference between dropping support and not bundling any more. While this may be a bit startling, I don't think it's the big problem you make it out to be.
HOWEVER, it seems like the real story here is the validation of Microsoft's fears regarding 'the viral nature of GPL licenses' - IMHO any license that presumes to burden other software like this needs to be examined carefully and preferably stomped out unless there's an overriding reason to keep it around.
Philo |
| Sun 29 Jun | John K. | It means that PHP and MySQL developers decided not to care about the users of their products. |
| Sun 29 Jun | someone trying not to call this FUD | Why are you laying this at the feet of free software when the problem is your lazy ISP? As you say, it can be 'still be installed easily.'
If I were you, I'd be annoyed at an ISP that can install the shiny new PHP 5 but refuses to install a little official extension.
Visit http://www.webhostingtalk.com/ |
| Sun 29 Jun | Mike | Are we going to have to coin a new term for LAMP?
Actually this reminds me of the Apache 2.0 fiasco. Apache 2.0 is a great thing. The problem is so many modules, mod_php etc weren't done at the same time.
I understand that the apache people don't make most of the modules. The problem I have is that because some of these modules are teamed with Apache 90+ percent of the time, to many users of this technology it is like they are one product. In the minds of a lot of people not having the important modules available for 2.0 would be analogous to IIS all of a sudden not supporting ASP.
Open source needs to coordinate release schedules better so they have complete products (solutions) when a new major version is available. Of cours I know that this is like hearding cats, but it does hurt the cause. |
|
| FastCGI or Apache Module | Sun 29 Jun | Alexander Chalucov (www.alexlechuck.com) |
| I have to develop a portable (Windows, Linux) application in C++ which will have browser/http interface. The application will cache large amounts of data in memory, so CGI does not seem to be a good choice. I see two ways to approach the problem - Apache Module or FastCGI. Here are a few thoughts about it:
- FastCGI is supported on multiple web servers (including IIS), which is nice. However, installing Apache on the machine where the application will run is an acceptable requirement.
- The API for creating an Apache module might change. For instance modules created for version 1.3 would not work with 2.0. On the other hand, after the major redesign in 2.0 its less likely to happen in the future.
- I do not expect lots of requests (small amount of requests - lots of processing, the application will be used by one user most of the time), so the better performance of an Apache module (running in the same process) does not matter.
- Most of the things related to FastCGI seem to be in an unfinished, or even worse – abandoned state. Binaries dated 2001 with version 0.6, websites that haven’t been updated for a while … I am not sure whether FastCGI will be developed or even supported well in future.
Have you used FastCGI or created Apache modules before? What are your impressions about the ease of development, debugging, reliability? What about the future of FastCGI? Can you recommend me some examples to start with? |
| Sun 29 Jun | Mike Swieton | I've no experience with what you're wondering about.
However, it seems to me you're going a step lower than really necessary. Is there a reason you're going so low-level? Or would it be, perhaps, more reasonable to use a web-programming platform like PHP?
If PHP is out because of the cache requirement, what about JSP, ASP, directly modifying an embeddable web server, etc.?
I only mean to illustrate that I think there are significantly more than your 'two ways to approach the problem'. I don't know what would work best, as I've done little web programming, but it doesn't sound like you've investigated many possibilities. |
| Sun 29 Jun | Wayne Venables | I have to agree with Mike.
It doesn't seem that any application with an browser/HTTP interface needs to be completely written in C++.
If your application absolutely needs to the power/performance of C++ then I recommend using a client/server design. Build a simple client front end in Java or PHP (I recommend PHP) that connects to your backend C++ server to do the processing. This has the added benefit of splitting up the browser/UI code from the server code. |
| Sun 29 Jun | Tom Vu | If you have to do it in C++ and need HTTP support look for a C++ API that allows you to run a simple standalone embedded http server within your app. |
|
| Does Java Suck? | Sun 29 Jun | IPreferToRemainAnonymous |
| I work for a company that builds web applications. Were currently in the process of moving from a scripting language that does everything we want to Java, simply because large numbers of clients will only consider solutions written in Java. Yes, this is stupid, but necessary for the company to survive. We have hired some experienced Java programmers to ease the transition. However, the Java code written by these programmers runs very slow and seems to take forever to change when clients ask for mods. This is a foreign world for the rest of us because if our previous code took over 1 second to do something we would be wondering what went wrong. Plus, unless a client request was really stupid (50% of them) then making substantial mods could be done pretty fast.
So my questions are: is Java slow and hard to modify and therefore unsuitable for a web apps?
Is the solutiuon to charge more to cover the increased development costs so the clients can get slower applications written in JAVA!
PS: our current script based apps are written in a very advanced manner to form an api-like interface that is very fast, robust and easy to modify. The heavy lifting is done with c++ modules. |
| Sun 29 Jun | John K. | Java is a large productivity and safety gain compared to C++ or C.
However, it is significantly less productive than Delphi, or Python.
Perhaps you can offer your clients 2 prices, one for using Java, one for using whatever scripting language you use. |
| Sun 29 Jun | Walter Rumsby | Well written Java is neither slow nor unmodifiable. |
| Sun 29 Jun | Matthew Lock | I'm always baffled by why clients care what language an application is written in. I don't care what brand of robot built by car.
I would be tempted to implement a small amount of the system in Java and leave the rest in your scripting language.
Which scripting language is it by the way? |
| Sun 29 Jun | John K. | > Well written Java is neither slow nor unmodifiable.
Compared to what? This is the important question. |
| Sun 29 Jun | IPreferToRemainAnonymous | The scripting language is Cold Fusion (yes, it can really suck, but it is possible to write good code in CFML if you know what you're doing). Actually CFMX is compiled to java servlets and then executed (only recompiled if they change). Perhaps that's the answer to my question - if they can run fast then there's no reason why other Java code can't run fast.
Maybe the design patterns used by your typical Java programmer result in slow code? Whereas the CFMX coders probably write really ugly code that is optimised for speed?
That still leaves the issue of development time. I'd say that Java takes 4-5 times longer to write - for the same result. |
| Sun 29 Jun | Philo | 'Actually CFMX is compiled to java servlets and then executed '
Uh, doesn't that mean you're already writing in Java? This seems like a complete no-brainer. If you're running Java bytecode, you're running Java bytecode. It's no business of the client what the source of the Java is...
How does the deployment compare? (Cost & TCO)
Philo |
| Sun 29 Jun | Walter Rumsby | Maybe it's the Java programmers you hired that suck. |
| Sun 29 Jun | Evgeny Goldin | [[ Maybe it's the Java programmers you hired that suck ]]
I wonder why this trivial option never occured to the original poster .. I'll ask another question 'Does people enjoy asking why Java is slow and suck so much without pointing to the developers first ?' |
| Sun 29 Jun | Dan Shappir | And here is an example of how a Java developer can suck:
for ( int i = 0 ; i < 100000 ; ++i ) {
char[] buffer = new char[10000];
... // do something with buffer
}
instead of
char[] buffer = new char[10000];
for ( int i = 0 ; i < 100000 ; ++i ) {
... // do something with buffer
}
QA won't catch it - after all, both work, but it's a bad bug.
Note: the first example is actually a direct translation of *good* C++ code:
for ( int i = 0 ; i < 100000 ; ++i ) {
char buffer[10000];
... // do something with buffer
}
This goes to the discussion previously held on this board about 'leaky abstractions'. The CF example is a justification of my assertion that working at higher levels of abstraction often results in more efficient code.
I assume that CF's developers did a lot of work to make sure that the generated Java code is efficient, work your Java developers must now 'duplicate'. Since they are apparently not as good as the Java developers working on CF, the result is not as good.
Also, it's quit obvious why an environment specifically created for Web applications is more flexible in that context than a general-purpose language such as Java. That is why system developers using high-level programming languages often like to create Domain Specific Languages (DSL) for a problem domain.
BTW, I agree with Philo - just give them the byte code and tell them it's Java. |
| Sun 29 Jun | IPreferToRemainAnonymous | I don't think that the developers suck. Admittedly when I look at their code, it seems overly complex for what it has to do. But I don't think that I'm really qualified to make the call. Perhaps as I start to code more in Java, I'll also have to make very complex inheritance heirachies, etc in order to achieve the same results that can be done in CFMX.
I'd really like to quiz them on why their code is written in the manner it is, but they have no time to spend on educating me because their projects are already running well over time.
They have impressive programming credentials, which is why I just assume that programming in Java is labour intensive and difficult to get right.
CFMX is around US$5000 - fairly expensive.
Java is about US$0 last time I checked. |
| Sun 29 Jun | Chi Lambda | >> 'If you're running Java bytecode, you're running Java bytecode. It's no business of the client what the source of the Java is...'
But the client may want to see webpages extentions with .jsp instead of .cfm. :) |
| Sun 29 Jun | Dan Shappir | >> Perhaps as I start to code more in Java,
>> I'll also have to make very complex inheritance
>> hierarchies, etc in order to achieve the same results
>> that can be done in CFMX.
Are you refactoring your entire framework in order to work with Java instead of CF or is this just a one-off for that customer? If the former than it's quit understandable why it's so hard and takes so long - your programmers are basically recreating CF. CF costs a lot because it was a lot of work to build.
If the later, their implementation should be very specific and thus shouldn't require complex inheritance hierarchies (unless that customer has very complex requirements).
Could be they are simply over-engineering, as programmers are wont to do.
I also have to ask: given your investment, is this project cost effective? |
| Sun 29 Jun | IPreferToRemainAnonymous | Dan - I think you're right.
CF gives us a lot of pre-built stuff right out of the box. In order to rebuild our applications using Java, we'll have to reproduce CF's existing functionality, including the optimisations to make it fast. No wonder it seems to suck to me.
I think that I'm under-estimating the effort required to move to Java. It's like moving into the countryside and trying to rebuild the city that you used to live in. |
| Sun 29 Jun | Sammy | You need to profile the code and attack bottlenecks.
The really sad thing about this is, you have a bunch of cold fusion guys who find java weird. Suppose you were buying a webapp that you wanted to modify. You'd want Cold Fusion over Java, wouldn't you? That's because you find Java ponderous, and your team is full of Cold Fusion ninjas.
If you think about it, CF already had a few Java optimization cycles, whereas in your case, the emphasis was probably on time-to-market and not efficiency. |
| Sun 29 Jun | Johnny Bravo | 'Admittedly when I look at their code, it seems overly complex for what it has to do.'
Perhaps you should judge the produced code by the following rules:
'Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it. (...)
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.'
Although written with Python in mind, I'd say they're valid for any higher level language. |
| Sun 29 Jun | Erik Lickerman | Assuming this post isn't just designed to get java lovers and java haters all fired up I would suggest the following. It is entirely possible that for a given application a JSP implementation would be slower than a ColdFusion implementation but there is really no exuse for it being ponderously slower.
What is the nature of your application? What is it running on? Does it do a lot of database interaction and if so are your developers failing to use connection pooling? Have they looked into all the prewritten tag libraries which are available (in fact, wasn't cold fusion supposed to be available as a JSP tag library by now?). Are they only using JSPs or are they using other aspects of J2EE such as EJBs? In many situations Message Driven Beans (or just your own JMS code) can make apparent performance improvements by decoupling operations.
The short answer to your question is no, Java doesn't suck. Like any other programming language it has strengths and weaknesses and requires good programming and code optimization to be at its best. Yes, I know a pure C++ implementation will usually be faster with less effort, but if you were to code in all the extras that Java gives you (no buffer overflows etc.) I'm certain you could slow it down quite a bit.
Also, switching languages because a customer wants you to is stupid. The proper response is to try to talk them out of it, but if they insist you need to decide if the cost of the new development is higher or lower than the money these customers will or will not pay. |
| Sun 29 Jun | Savage Planet | Back in 2000, I wrote a few dynamic web pages using Java servlets (I used Apache's Tomcat). They were the standard database driven stuff. A form post would write to a database and each page displayed information in a database.
The speed of a page fetch was fast. No noticeable delay at all.
Perhaps the programmers you are using aren't very good. In my time I've seen Java programmers do silly things. For example, database connections weren't being cached and so each page fetch would have to make a new database connection. Very sloppy and very slow. I've also seen some Java programmers forget to close (or better still return to the pool of cached database connections) the database connection after the database query was over. A few dozen page fetches and all the connections will be used up. |
| Sun 29 Jun | Clutch Cargo | Yes, Java does suck. |
| Sun 29 Jun | coresi | I can not help … Slow weekend, I have to enter the fray …
Dan Shapiro: I mean no offense, but everything is relative…
1. One may notice your example number one sucks in any language but some are more resilient due to fast memory allocations and a lack of GC.
2. How do you know how
“char[] buffer = new char[10000];”
compares to
“... // do something with buffer”
without profiling?
As far as the casual observer knows “char[] buffer = new char[10000];” can be completely insignificant in the grand scheme of things.
3. An experienced designer would point out even example number two sucks since creating a memory pool will avoid unnecessary heap fragmentation and memory allocations for you entire application.
I know… This solution sucks. |
| Sun 29 Jun | Dan Shappir | It's Shappir not Shapiro :-)
Anyway,
One may notice your example number one sucks in any language
Not so. I provided the C++ example to show that it need not always suck. Indeed, in C++ it's better to put such a buffer definition inside the loop for scoping reasons. I actually saw this error while reviewing code that was translated from C++ to Java.
be completely insignificant in the grand scheme of things.
Everything is insignificant in the grand scheme of things, but doing 100000 allocations of 10000 words when a single allocation would suffice is generally a Bad Thing.
And yes, I never optimize before using a profiler (well, almost never; sometimes I just can't resist ;-) |
| Sun 29 Jun | coresi | >>It's Shappir not Shapiro :-)
I apologize, my honest mistake.
>>Everything is insignificant in the grand
Exactly. No reason to bash one language or another…
>>but doing 100000 allocations of 10000 words when a single allocation would suffice is generally a Bad Thing.
My Electrical Engineering background says while allocating more than necessary is a waste, if it takes one order of magnitude less time than the “// do other things” line you can safely ignore it. |
| Sun 29 Jun | Andy | Not to be pedantic, but the C++ equivalent would have the same problem.
you could do:
for ( int i = 0 ; i < 100000 ; ++i ) {
char* buffer = new char[10000];
...
}
In which case you would also have an enormous memory leak!
I don't really see how this is an example of Java developers sucking. It just means when you translate from one language to another, you should:
1. be careful, I could see anyone doing this if they were rushed with a deadline
2. actually know both languages and know their differences |
| Sun 29 Jun | beaver | yes, java sucks. |
| Sun 29 Jun | Daniel Shchyokin | What app server are you running on?
is it tomcat/bea
or resin/orion
also are you using ejb's |
| Sun 29 Jun | | I'm curious that you say the Java programmers have good 'programming credentials.' What does that mean? They have little certificates? It doesn't sound like they are experienced i.e. good developers.
Java and especially J2EE can suck badly. Things like EJB's encourage developers to bloated overkill. Struts is a good way to make code dangerous.
As Walter Rumsby says, it is possible to write good code in Java, but it's common to see poor code, perhaps because J2EE has attracted all the little certificated trendoids. |
| Sun 29 Jun | Walter Rumsby | I'm still wondering what you're trying to do with your migration CF to Java. My understanding is that .cfm pages these days are alternatives to/implementations of JSP pages - basically CFML is not unlike Velocity, Struts, WebWork, etc as an alternative view technology.
So, all your view logic should/could still be in CFML tags. It's stuff like that shouldn't be being used - Java should be doing the 'heavy lifting', ie. anything that is not simply outputting, looping over for instance table rows, etc.
Is my understanding of CF MX correct? My impression is that basically the CF server is now JRun and .cfm pages get turned into .jsps and/or servlets? Do your Java guys know this or are they potentially recreating CFML without realising that it already exsists?
'Complicated inheritance hierarchies' also raises a red flag. Overuse of inheritance suggests a naieve understanding of OO. Using EJBs where they are not needed can also be problematic.
Finally your clients insistence that your applications be Java and not Cold Fusion based seems to reflect Allaire / Macromedia's thinking - larger scale applications should be written in Java with CF as the view technology. This seems to suggest that your clients simply want flexible applications. Given all of this you can give them CF-based applications that are also J2EE applications - maybe they need to know that.
(Aside, Ben Forta's JSP book is very very bad - he is/was the author of the most well regarded CF book when I was working with CFML in 1998, but the JSP book is riddled with syntactical and ideological errors). |
| Sun 29 Jun | Neil Bloh | 'Beautiful is better than ugly.
Explicit is better than implicit.'
etc.
This list is probably one of the most useful comments I've seen on the Joel on Software Forum. |
| Sun 29 Jun | Jim S. | No, Java does not suck. However, it can be argued that most Java programming teams suck (as do most C++ programming teams, and most LISP programming teams, and most Visual Anything programming teams, ad infinitum.)
Think about it this way: your team spent years finely crafting and honing a solution tailored to specific circumstances. The new Java guys came in and slapped something together. The question isn't 'Does the new stuff suck?' Of course it sucks. Nor is it 'Why does the new stuff suck?' The question is 'Do the new guys have the talent and management have the patience, savvy, and money for the new team to gell into a highly-productive team?'
Another way to think about it: were the Java guys told to optimize their solution for performance and flexibility or were they told to get something operational as fast as possible? Teams optimize what they are told to optimize and they do it at the expense of other things. This is commonly aphorized as 'cheap, fast, good: pick two.' For large values of cheap and fast, it ends up being 'pick one.' |
| Sun 29 Jun | Mike | Java can work for you. It requires more knowledge to build fast apps with java than many other languages. I base this on the fact that many believe java to be slow. Where did that impression come from. From witnessing slow java apps.
I do not mean to imply java cannot be fast, simply that it is apparently incredibly easy to write slow apps concluded by the fact that there are so many slow apps. Maybe there aren't enough smart java developers.
My opinion - write it in whatever you want, it is your product, not your customers. If you make it do what you clients want - that's it. |
|
| How much surveillance is too much? | Sun 29 Jun | John Wilson |
| http://www.thescotsman.co.uk/index.cfm?id=702632003
From the article:
EVERYONE does it. Millions of people use their office internet access to check out cheap flights, home shopping or celebrity gossip.
Sending e-mails and jokes to friends has become a common ritual in the working day, but now there’s a new term for personal use of the corporate web server - cyberslacking.
However, the fun could soon be coming to end thanks to a Glasgow technology firm.
Experts at Iomart have devised a new Big Brother software system, called NetIntelligence, which will show managers just how much time employees spend surfing the net rather than doing the job they are paid to do.
[...]
Mouse movements and keyboard strokes are all recorded, letting managers see what employees are watching on the net, who they are e-mailing and which sites they have logged on to.
What do you think about this? My first thought is that if the company feels they have to install something like this to get their employees to actually work then the software isnt going to fix the management problems that got them to where theyre currently at. Whereas if a company installs this because they feel robbed by an employee spending 5 minutes checking plane ticket prices for an upcoming vacation, then their corporate culture is already so dysfunctional and fear based that it would amaze me if anything gets done. |
| Sun 29 Jun | Philo | Go read all the 'can we measure productivity by counting lines of code' threads - the same concepts apply.
Employee productivity should be measured by tasks assigned and completed. This works at any level. If John works his butt off and produces 25 widgets a day, but Jane can produce 30 widgets a day while surfing the net for 30 minutes, should management really be chastising Jane for not being productive enough? [net result: Jane takes her efficiency to a competitor and makes 30 widgets a day for *them* and instead of 55 widgets a day you're getting 25]
Tasks assigned, tasks completed. HOW they're completed is none of your business.
BTW, there's also a really good Dilbert about this - the Boss is beating him up about spending ten minutes doing online banking. Dilbert agrees and says next time he'll take the hour and a half it takes to actually go to the bank.
Philo |
| Sun 29 Jun | Philo | One other thought to sum it up:
Are you paying your employees to accomplish tasks or are you paying them to sit in a chair?
Philo |
| Sun 29 Jun | multi_faceted_dev | Not only is it dysfunctional, but it's missing the point. Software development is not typing, it's creative thought. What you're essentially measuring is not 'slacking' with these tools, but time not spent typing emails or in an IDE.
I think this may work fine for certain environments where there is a cheeseburger-factory-style work process, and that's acceptable. For knowledge work, it's probably a great way to destroy productivity.
The furrowed-brow, 'work is not play' types may enter their myriad complaints now--I know what I'm saying doesn't jive with the boardroom politic. But even so, there's probably a basic inequity here, namely:
Who would be watching the managers? How about the CEO? Does this anti-'cyberslacking' initiaive reciprocate? Would we have 'Productivity Departments' to independently measure cyberslacking up and down the corporation? Who would measure them?
I maintain that people, at least in knowledge professions, should be judged based on their output, not on their process. If cyberslacking is so bad, surely it will show up in performance. And if the sole purpose of this is to incentivize people to work harder, then one wonders why a company hires 'slackers' to begin with... |
| Sun 29 Jun | Philo | By the way, I think it was Joel that pointed out - let your employees be happy in the office and they'll spend more time their. Make their lives oppressive and miserable and you will get exactly 480 minutes a day out of them and not a drop more.
Philo |
| Sun 29 Jun | Matthew Lock | That was Greenspun who said that if you make the office nicer than the home they will stay at work longer:
'Your business success will depend on the extent to which programmers essentially live at your office. For this to be a common choice, your office had better be nicer than the average programmer's home. There are two ways to achieve this result. One is to hire programmers who live in extremely shabby apartments. The other is to create a nice office. Microsoft understands this. In the early 1990s they did radio spots with John Cleese as a spokesman. One of the main points of the ad was to ridicule the cheap open-plan offices in which programmers were traditionally housed and promote the fact that at Microsoft each developer gets a plush personal office'
http://philip.greenspun.com/ancient-history/managing-software-engineers.html
(Great Article by the way) |
| Sun 29 Jun | Mister Fancypants | The flipside of Greenspun's advice though is that many managers tend to just grab on to fad ideas and not try to understand the logic behind them. This can result in situations where you have a nice office environment and many employees who stick around for 10-12 hour days (doing things like non-work web surfing and playing games mixed in with their work) and then people who just want to go in for their 8 hours and get home to their families, friends, or whatever else are seen as slackers, even if they are as productive or more so than the 12 hour workers.
In the end, what you really need more than any specific business idea fad is managers with some common sense, which (as I'm sure many of you are aware) is frightfully uncommon. |
| Sun 29 Jun | Phibian | Incidentally, there's another use for this kind of software...
I've done quite a lot of investigation of these over the years (the concept is not exactly new) because they can be very handy for
a) tracking what you are doing all day (so that timetracking stuff for billing, for example, becomes automatic)
or
b) keeping a testing record on a machine for debugging purposes. (Very handy for those intermittent and obscure bugs for which you have no idea what you did to cause it. If you have keylogging and screen capture software installed - you can go back and see.
I've never really come across software of this type that I like, however. It usually has one or more of the following drawbacks: a pain to use, has incomplete tracking, is hard to report on or impacts performance. |
| Sun 29 Jun | Ioao | Funny thing is what a friend of mine does. The first thing that he does when he gets to a place with net connection is to plug his notebook and check emails and news, etc. But, he owns a little business, that doesn't have net connection for his employees. Smart guy :-) |
|
| Software protection | Sat 28 Jun | Boris Yankov |
| I am thinking about how to protect my upcoming software.
I saw that SWREG.com - a popular web site for payment supports ASProtect, Sikandersoft Safeserial, and Armadillo.
So far so good.
But just a quck search on google with ASProtect crack and I found a tutorial how to crack ASProtect itself.
So I am wondering if these protection really work.
I know I can protect my software relatively well, because I have read a lot about this matter. But protecting it with a popular Protection System I may actually make it easier for the crackers.
Do you have any experience regarding this topic? |
| Sat 28 Jun | Jimmy Chonga | No software protection technique is going to be invulnerable to piracy, but that isn't really what you should strive for: The productive goal is to make it inconvenient enough for the majority of your potential customers that they just won't bother, and presuming that the cost of your product isn't too onerous, they'd just as well rather pay the honest price rather than hang around in IRC looking for cracks which might be loading their system full of trojans. |
| Sun 29 Jun | Boris Yankov | I will certainly make the app easy for the registered users to use.
But that doesen't mean I don't want a decent protection of my program.
Other opinions? |
| Sun 29 Jun | Troy King | Boris, I don't think anyone has the perfect solution to this problem. I've been reading about products and mechanisms to protect software for 15 years, and have never heard of one that couldn't be cracked. Even hardware protection (like dongles) can be cracked. The hackers disassemble the app and remove the checks. They are exceedingly good at this. |
| Sun 29 Jun | Johnny Bravo | Wait until TCPA/TPMs are incorporated inside MS Windows/Intel CPUs/Mainboards. If it yields true what I've read so far about the combination of the three components, you as a developer will be able to run your code in a protected environment where tampering your code will be prohibited at the lowest level, which is in hardware. |
| Sun 29 Jun | Andy | Hardware features may make something more difficult to crack, but it is still crackable. As long as your program resides on the disk as a pile of bytes accessible to anyone, it is possible to crack.
Just look at the XBox, Microsoft could have done anything they wanted and it still got cracked. Well I'm not sure it's the exact same thing, but now you can run any executables on XBox, not just Microsoft's signed executables. |
| Sun 29 Jun | Philo | Content management keeps honest people honest. *Nothing* has ever worked to keep programs from being stolen - they've only made it harder.
There's a digital rendering package that has a hardware dongle (Maya?). I've had it running on my PC.
The lesson - be careful how much effort you put into your software protection schemes. I think you quickly pass the point of diminishing returns, especially when you consider that protection schemes piss your users off.
Also - time spent implementing software protection is time better spent working on your code.
What makes me pull out the credit card:
a) Quality code with the features I need
b) Nag screens
c) 30-45 day expiration date
If it's a component for use in distribution packages, make sure to render 'EVALUATION USE ONLY' in the client UI if you can.
Philo |
| Sun 29 Jun | | Change protection schemes from time to time and keep up on what the hackers are doing so that old cracks, hacks, public serial numbers, etc. are no longer valid in the next version. Do small dot releases basically for this reason alone. Make your app large enough to dissuade anyone from posting it in it's entirety on a hack site. Once you become big enough it'll be unavoidable... everyone and their brother can get a copy of Potoshop.. |
|
| Link Colors observation | Sat 28 Jun | Philo |
|
Something of note - during the debate about the absolute necessity that links be a uniform color, nobody brought up that the darling of the JoS crowd, Google, doesnt follow this convention.
The links for Cached and Similar Pages are grey.
Also check out Google Groups - the links for the group name and View Thread are green. Anyone heard any complaints about users being lost on Google? Will one of those advocates of Blue/Purple uber alles please write to the good folks at Google and tell them they dont know anything about website design? [grin]
Philo |
| Sun 29 Jun | X. J. Scott | Dude!! Fantastic catch! There aren't too many people arguing that google is a poorly designed site confusing for visitors to use.
As for me, I've been using the internet since before the web existed and I still can't remember if it's blue or red or purple or whatever the default is supposed to be.
Here in Safari, it's bright blue and dark blue. Now I think that the brighter, more saturated colors mean unvisited -- that I can remember since it's sort of intuitive. But blue vs red vs green just doesn't make any sense to me and ten years from now after seeing it a million times more I probably still won't remember it. |
| Sun 29 Jun | Tom | Do you want a prize? But seriously -- if you look carefully, the links that _matter_ (i.e., point to the pages you are searching for) are the same colour as the default settings in windows. (Interestingly, if you have changed your settings, Google does not notice -- I suppose they have set the colours explicitly.)
I changed my IE colours earlier today, for black-on-white is proving too much for my poor mince pies. I changed my link colours while I was at it. This made a _big_ difference; I was lost for about an hour or so, just through having to look twice when visiting a new page through not being accustomed to the link colours.
But I'll not be annoyed at web designers ignoring me until they start asking me about C++.
(Incidentally I think that Google _is_ a bit tiresome to use, because it doesn't let you bookmark an advanced search (groups or web) page that is set to display 100 results per page sorted by your preferred criteria.) |
| Sun 29 Jun | John Topley (www.johntopley.com) | Tom,
This URL will go to the Google Groups advanced search page, set to display 100 results/page, in English and sorted by date:
http://groups.google.com/advanced_group_search?hl=en&num=100&as_scoring=d&lr=lang_en
You've just got to decode the URL parameters, which isn't hard. |
| Sun 29 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | This site overrides colors, too. It forces the white background and the black text (although it seems to be obeying the link colors properly). |
| Sun 29 Jun | FirstNameRequired | with the target audience of slashdot being computer geeks, I would be astonished if there _had_ been any complaints.
certainly doesn't change the core idea. good usability required consistency. |
| Sun 29 Jun | Philo | How did Slashdot come into this? I'm talking about Google.
'certainly doesn't change the core idea. good usability required consistency.'
The core idea is 'make users happy'. With Google being one of the top web sites in the world, I'm thinking they've done that. Now mind you, it's their content that's done that, but I don't recall *ever* hearing a single complaint about Google's interface - in fact generally I hear praise for how clean it is.
So that challenges the assertion that blue/purple is the only acceptable color for links.
Philo |
| Sun 29 Jun | mb | If you understand why the rules are there, you can break them.
they use standard link colors for standard links, standard text for the main data, bold for the stuff which is important to you (words matching the query), a second color for the link (the actual thing you which it found for you, but not the main 'human' data), and grey to indicate other things an advanced user can do which are not part of the core result set.
i wonder if they wrote up their thought process? the above is based on what i can see as a user. |
| Sun 29 Jun | FirstNameRequired | 'How did Slashdot come into this? I'm talking about Google.'
sorry...slashdot on the brain today for some reason.
'in fact generally I hear praise for how clean it is. '
not to argue that point but the most praise I hear about google is how it resists adding pointless images....IMO that fact by itself places it faaarrrr ahead of any other search engine.
but anyway...
'So that challenges the assertion that blue/purple is the only acceptable color for links.'
not really.
Google still uses the standard blue for the most important links (ie, the links that its most important the customers recognise)
On its home page for instance, nothing but blue links as far as the eyes can see.
If I perform a search ('importance of consistency in web design) I get every search result with its own, _blue_ link at the top. These are instantly recognizable as links and if this search result is a good one this is the link that 99% of users will care about.
Underneath each result is a link in grey, showing a rough hierarchy, not many people will need this and it makes sense that the link colour is slightly different to the more importance search result at the top.
Finally there is green text at the bottom giving the full url (is not a link however) and beside that a grey link to the cached page. Again, not many users at all will be interested so it makes a lot of sense to use a less 'in your face' colour.
A similar approach is used for groups and the other areas.
Overall Id call it a very good design by someone who understood both the importance of maintaining consistency _and_ where it was best to do so.
Certainly Id be willing to bet that if you emailed the google development team and asked them why they choose blue as the color for their main links, they would explain the importance of using that colour as an aid to usability. |
| Sun 29 Jun | FullNameRequired | oops...sorry, it looks as though Ive just repeated mb's points again.
....definitely not my day... |
|
| Aeron vs Mirra - Mortal Kombat | Sat 28 Jun | Tim Sullivan |
| My current chair, which has served me well for 4 years, and given me a place to uncomfortably perch for the last 1 is finally at that point in the lifecycle where you need to take it out back an pump a few bullets into its back support.
So, while I continue to sit on the soon-to-be carcass (and scrape my arms on the exposed metal), I needed to decide what chair Im going to replace it with. I went down the the nearest Herman Miller showroom to try out the infamous Aeron as well as the newer Mirra model.
Now, Im not a small guy. Im not fat, but Im 64 and weigh about 255. I sat on the Aeron for the first time and it felt great. Fantastic. I leaned back a little bit, and it felt smooth and then I leaned back all the way.
Goosed.
I totally was not expecting this at all. The sales guy (who was about 5 shorter and 20 pounds heavier) said that on his Aeron he uses the tilt limiter to avoid that problem. I tried it, and in order to ensure no ass-to-whatever contact, I was only able to lean back about 40% of the way that a smaller person would be able to. So while sitting up it was nice, leaning back was less enjoyable, especially for a chair that runs CDN$1500 once you factor in the taxes and delivery and so on.
Then, I sat in the Mirra. Before doing anythinge else, I leaned back to check for ass contact. There was none. The trip back was also smoother than the Aeron. The seat is a similar material as the Aeron, allowing for a cooler seat during long work periods. The back is made of a flexible plastic material that gives more than the Aerons frame does when I rotate my body (like, say, when my GF comes in to ask me a question!)
There is, of course, some ego to include here. I want the best chair I can, and money really isnt an object. The Aeron is the high end chair, and the Mirra is the mid-to high end chair. The Aeron is more expensive, and given that its from the same company, that usually means its better. However, I must say that after spending about 20 minutes in the Aeron and 30 or so in the Mirra, I way, way prefer the Mirra. I like the colour and design better, I like the fit better, I like the absence of ass contact better, everything. Even the price is better: $1150 fully loaded with tax and everything.
So, I ordered one, in a nice, light yellow (citron) colour. Now, I just need to suffer for 8 more weeks until it comes to my home. :-) |
| Sat 28 Jun | Mike Swieton | Not to be an asshole (or more of one than usual), but what is the point of this post?
You are not asking for advice, as you've already ordered it... I don't mean to be telling you not to post here, but it looks like an ad (not that I really think it is, but you see my point, don't you?).
Anyway, I also dislike the wierd ass-contact on the aeron. We have a few at work. I honestly find I work better on a cheap little $80 office chair. It works well for me, though wears out in a year.
Anyway... yeah. |
| Sat 28 Jun | Tim Sullivan | I'm not sure why I forgot to include the last paragraph:
I'm interested to hear other people's stories in the chair finding realm - good, bad, other. I'm especially interested to know if anyone else has used the Mirra for longer than 20 minutes, and can comment on how happy they are with it longer term. |
| Sat 28 Jun | Tom | Doesn't the Aeron come in three different sizes? Did you try the largest size? This might have alleviated your problem. |
| Sat 28 Jun | Ken Klose | I own the Aeron (in the largest size) for about two and a half years down. Never had any grab-ass problems, but I can tell you that the mesh that constitutes the seat and back stretches over time so that the chair is no longer as comfortable. It feels like you're sitting in a pit. For the price I wouldn't get another. |
| Sat 28 Jun | Konrad | I've sat in an Aeron for the last two or three years - what is this ass-contact of which you speak? I'm not sure I have experienced it, could someone describe it? |
| Sat 28 Jun | Philo | It happens right as you're writing the $800 check for a chair - it'll feel like a deep probing sensation in your hindquarters...
[g,d,r]
Philo |
| Sat 28 Jun | Chas | I discovered a 'mesh' office chair through the Staples online store that is bar-none the most comfortable chair I've ever sat/worked in, for $100: http://www.staples.com/Catalog/Browse/Sku.asp?PageType=1&Sku=456359
It has excellent back supports, both at the lumbar and shoulder blade levels, and the mesh material makes it very breathable and cool in warmer environments.
The oldest one I have is two years this summer, and has taken quite a beating (I'm 6'3', currently 235 lbs.). About the only thing the chair lacks is adjustable armrests, although they're at the perfect height for both me and a friend of mine who's 5'9'. |
| Sun 29 Jun | Tim Sullivan | For the record, it was the C chair I was sitting in. Basically, when I sat back, I was no longer resting my weight on the mesh, but on something hard below it.
As for the mesh stretching, it does seem to be covered by their 12-year warrantee that covers all aspects of the chair, so if yours has stretched, you probably want to call them and get it fixed.
It's funny - I never noticed how hot my seat got until I started looking for a better chair. :-) |
| Sun 29 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | +1 for being goosed. I'm not small, either, built similarly to you, and it happened to me in a C chair.
Also, let me warn you: sit fully on the seat. Sometime in the last decade I've gotten in the habit of 'half-sitting' on the front-half of the seat of my chair. Not even sure why it's become a habit (although I do move around a lot, so maybe that's why). The Aeron seat is absolutely not designed for this, because the entire support for the seat is in the back (unlike most chairs, which have support in the middle), so you'll snap the plastic in no-time flat. :( |
|
| developer doing design,testing,documentation | Sat 28 Jun | anon |
| I am a single programmer working on a reasonable size data mining project.In addition to design, research, finding appropriate algorithms, coding etc.. I am spending a whole lot of time in testing and documetation in the project,
how do other developers balance these aspects?
I am finding getting immersed in testing, I am neglecting other developmental activities.
I work in small company with no testers or tech. writers, how to balance out the responsibilities, given that I am primarily a dev. guy? |
| Sat 28 Jun | Giovanni Corriga | I think that testing _is_ a development activity. If I don't test your code, I can't be sure neither that I've build the right thing, nor that I've build the thing right.
That said, I think that you should try and automate your tests. This way, the time you spend on testing is just the time needed to code them.
As for the documentation, what kind of documentation are you talking about? User Manual? API reference? |
| Sat 28 Jun | Giovanni Corriga | Errata: It should have been 'if I don't test _my_ code...' |
| Sat 28 Jun | Pete | unit testing is one thing - UAT/system/regression testing - are not (IMO) developer activities - requires a different set of skills (and a completely different attitude). |
| Sat 28 Jun | DingBat | Actually, this doesn't sound so much like a 'what responsibilities belong to developers' question as it does a workload management question.
Your situation may not be ideal when it comes to a developer environment but you're stuck with it (unless you can convince the company to hire a tester). In that situation, I would say that the most important step is to try to get rid of the attitude that testing is somehow diverting you from 'more important' developer tasks. Since you are literally 'it' on this project, it's ALL important.
Do you create your own schedules as well? Or do you have a manager or someone who does this? Either way, you have to be more involved here and work to create sane schedules. Single threaded development teams are much more sensitive to disruption, etc, so you should be building more slack into the schedule.
One thing we've definitely learned in our group is that developers almost invariably underestimate the amount of 'noise' in their daily lives. I would recommend really trying to figure out what proportion of a normal 8 hour day you actually spend working on the project and what you have to spend on 'infrastructure' work. That can help you when you're scheduling.
Good luck. |
| Sat 28 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | I'd say, set milestones for yourself. Have a certain amount of functionality done every couple weeks, and devote, say, a full day or two at the end of those two weeks to test what you just wrote. |
| Sat 28 Jun | Daniel Shchyokin | find the eventual user and get them to do the testing on the UI
automate the API based tests |
| Sat 28 Jun | Mike Treit | My opinion: your company needs to hire some testers.
Unless your project is trivial, it is a mistake for testing to be done by the same people who wrote the code.
Ideally, you should have some dedicated test folks who are responsible for the end-to-end testing process, including component testing, integration testing, API tests, perf testing, scalability, customer scenarios, etc.
Your role, as the dev, should be to own unit testing (usually very basic component tests created around knowledge of the internal workings of the code), and take responsibility for executing automated tests (BVTs, acceptance tests, etc.) provided by the test team when you make changes to the code.
I think most people would also agree that having developers document a product is less than desireable.
Obviously saying 'hire some testers and writers' is easier said than done, but your product quality and schedule will suffer if everything is owned by the dev team. |
| Sat 28 Jun | | I always thought a developer did test, code design, documentation, and analysis. I guess it goes back to job titles mean different things at different places. |
| Sat 28 Jun | Barry Sperling | In my small company every developer does everything. Beyond the time I take personally for testing and documenting, I send continuing versions out to my actual client ( in the govt. ) who uses it in his work, then calls back with complaints and suggestions, leading to continuous bug fixes and additional features ( my boss, also, has a continuing flow of new feature suggestions ). Somehow, it all seems to work and the client gets his work done, too. |
| Sun 29 Jun | multi_faceted_dev | The answer is: you can't balance these aspects. Alchemists can't turn lead into gold, either.
Developers should unit test and do basic integration testing. They should communicate their technical decisions on a certain level. Beyond that, they're fish out of water. You don't have the unbiased perspective to do decent testing, so your customers are going to test the product. That's just a fact. It's not pretty, but it's likely true. And you are not a documentation person, and writing decent documentation is very time-consuming, so chances are your documentation is going to suck, unless you are an English savant. Again, a not-pretty fact.
And I don't agree that one can stretch the schedule in this case. A company that doesn't have the money to hire testing or documentation resources probably doesn't have the money to stretch release schedules, either. If they do have that kind of money, then they're probably managing it very poorly by not spending it on testers or documentation (since it's pretty well-established that both, especially testers, generally produce a good return for software projects).
So what you have is a conundrum, and it's one I know very well: you have three full-time jobs, and only one full-time. :) My suggestion is really quite simple: do what you know how to do, well, and do everything else to the best of your ability, and that may not be very well. Don't worry about 'balancing,' because you just can't be a jack of all trades and master of them all.
Anyway, this is a business problem, and so I hope your business has a great justification for contuing to impose it on you. |
| Sun 29 Jun | Bored Bystander | >> I work in small company with no testers or tech. writers
Everyone: This sentence in the original post says it all.
I've made my coin for years in software product development for small companies, as a consultant. What happens in the very smallest companies (including some quite successful ones in their respective realm) is that there is simply no money, time, willingness, or conceptual ability to deal with more players than one or two 'jack of all trades' person. Today I want to beat that last attribute, 'conceptual ability' into the ground...
Small companies exhibit both the best as well as the worst aspects of commercial life. The best aspect is that workers in that context tend to be extraordinarily motivated and self reliant. The worst aspect is that owners can be extraordinarily cheap, stupid and short sighted, and they can be very successful even though they do all the wrong things.
It's like an old slogan I saw in an underground comic: 'if I can't eat it or f*** it, then p*** on it.' Small company owners tend to have to see a direct physical relationship between an activity and an income producing product. They tend to be fairly incapable of the sort of abstract reasoning that allows them to understand that certain processes (such as test or documentation) complement direct tech work and result in higher quality for the user and thereby a competitive advantage. They just can't and won't believe, for instance, that test or docs aren't best done by the person that develops the code.
Note to anyone proposing to hold income producing business owners on a pedastal as a higher and Godlier form of life: absolutely don't. I work with a person in this context, a self made millionaire, who essentially lives and acts like a 5 year old and treats his employees and their own time like his personal possessions. I know a partnership of people that lucked into early success who are egotistical self centered jerks. Success spoils. |
| Sun 29 Jun | multi_faceted_dev | Bored:
You really said it all. If it won't offend your copyright-holdign status, I want to have that post framed and placed on my wall.
I have a personal saying, from my experiences in a small company:
'Wanting to work for a small company is like wanting to live in a third-world country.' |
| Sun 29 Jun | Bored Bystander | Multi-facet: trade yah... ;-) Sure.
>> 'Wanting to work for a small company is like wanting to live in a third-world country.'
LOL! How true. |
|
| Nitpicking Christopher's resume | Sat 28 Jun | Philo |
| Im bored and stuck on a coding issue, so I figured Id post some of *my* thoughts on Christopher Wells resume
http://members.rogers.com/xwells/resume2.doc
(which he posted in the number of pages in a resume thread)
Im doing this both to give Chris some feedback but also to talk some of the points out before I update my own resume.
So, starting at the top:
over ten years experience? If you started in 1981, you have over twenty years experience. I recognize that that statement brings forth visions of COBOL dinosaurs, but my first reaction to the discrepancy was math error? Im thinking twenty years experience with internetworking technologies and ten years of software development or words to that effect.
ASPs?
MS SQL Server & Oracle - put versions (Im guessing Oracle is 8i or 9i?)
Tools - drop Visual C++ (the ambiguity should work in your favor), add Rational in front of ClearCase.
Experience - from 1985-91 you were a tech writer? Or did you still have a hand in the doing part of things? Nothing wrong with being a tech writer, but if you did other stuff, get it in there.
Really need to fill out 87-91 a bit. Feels weak, especially if youre looking for a coding job.
Im not sure about the Projects page, but I do know when I went to read it my eyes kept slipping off the page. Then your second bullet in a whole page of accomplishments was read books. I really think that needs to go. At the very least move it *way* down the page.
The problem Im having with the Projects/Technology page is that the value of experience changes over time. For example, the SQL - makes a huge difference whether that was Sybase in 1991 or SQL Server 2k in 2002. Yeah, you can cross-reference, but we know how successful *that* would be.
I still think this info is more valuable placed in the mix with the chronological history. I know in every interview Ive been through, the interviewer seemed comfortable with simply regressing back through my experience, discussing projects listed, until it wasnt relevant any more.
Im curious to hear what others think of this style?
Philo |
| Sat 28 Jun | anon | The 4 years of SQL but 5 years of SQL Server caught my attention. |
| Sat 28 Jun | Jason | It's incredibly dense, in terms of the amount of text. If you've been working for 20 years, that amount of info is probably justified, but it's a lot to read.
I'd suggest creating 2 resumes. a) should be a thinned down executive summary that just lists hilights, not every single thing. Use that to get your foot in the door. When you actually land an interview, you can pull out b) and say 'here's a more in-depth version of my resume'.
I think a lot of HR guys would look at your current resume, say 'overqualified' without even reading all the way through it, and move on. |
| Sat 28 Jun | . | I agree that the resume looks packed, and information has obviously been squashed in. But that's not a big problem.
Overall, the resume describes a highly capable, very experienced developer with good business experience. If I was hiring, that's the sort of person I would be inclined to hire even without bothering about an interview.
After I read that resume, I agonised over what's gone wrong that such highly talented people are not getting jobs. |
| Sat 28 Jun | ymmv dude | Very nice!
Maybe one suggestion, which may or may not apply, ymmv, etc: save something for the interview.
I like to use the resume as a highlight and save the interview for the details.
Has Christopher been having trouble finding work? That would fit in with my theory that most employers don't need or want high caliber people. They just need a cheap code monkey.
If we had a union, we'd make everybody write everything in assembly! :) |
| Sun 29 Jun | . | No, do it like lawyers. Before you start any work for them, you get the deeds to their house. Then, on top of your fees, you charge $2 for each photocopy, $5 for each phone call, and so on. |
| Sun 29 Jun | Philo | Just wondering, ., if you smile and nod approvingly when people say that computer geeks are all antisocial jerks with no personality that live in their parents' basement.
Philo |
| Sun 29 Jun | Christopher Wells | Thanks for your comments.
Philo, that was interesting your saying, 'when I went to read it my eyes kept slipping off the page'. Perhaps that's due to the vertical lines in the table, and the way that the bullets line up. I reformatted as http://members.rogers.com/xwells/resume3.doc with section titles and body text instead of as a table ... perhaps it's more human now, less machine-like; but still full.
You also said 'I still think this info is more valuable placed in the mix with the chronological history'. As you know there is an example of the resume in that format at http://members.rogers.com/xwells/resume.doc ... it is a risk to stray from the standard format, but I'm not sure that it is more valuable placed in the mix. Given your next sentence, 'Sybase in 1991 or SQL Server 2k in 2002', in resume3.doc I did squeeze in an extra line at the top saying 1995 through 2003, and I changed the 'PROJECTS' title to 'RECENT PROJECTS', in case the only concern was that I was pulling in old experience from the 1980s.
What I really liked about the resume2.doc/resume3.doc format are the extra section titles. If I put these section titles inline the chronological history, then the document would have three or four levels of nesting/heading, instead of two.
The section titles are 'transferable skills'. I found myself explaining in cover letters how my experience matches skills like these that are listed in the job advertisement, and thought it could be convenient if this information were in the resume itself.
Note that in Emerick's case in http://cs-people.bu.edu/emerick/resume.doc there may be some connection between the two companies he's worked with (they seem to be both approximately email-enabled workflow products).
In my case I'm writing a 'functional' resume, partly for non-technical HR people, but even for people with development experience because it's likely that my next job won't be with people who are writing another Windows fax server.
http://www.quintcareers.com/functional_resume.html (Google's first hit for 'functional resume') agrees with the 'conventional wisdom' that I've read and heard elsewhere about 'functional resumes'. My resume2/resume3 would be what it calls a 'chrono-functional, hybrid, or combination format'.
('ASPs' are MS 'Active Server Pages', web pages written for the MS Web server, a combination of HTML, plus Basic which is executed on the server before the page is sent e.g. to get data from a database to populate the HTML, plus JavaScript which is executed in the user's browser).
=========
Jason, I started with an easy-to-read one-and-a-half page version, see http://members.rogers.com/xwells/resume0.doc ... various non-technical people liked it: few technical words, an 'executive summary' at the beginning, lots of white space... but, it wasn't getting me interviews, so no opportunity to pull out a more detailed version later. Apart from the fact that it contains few technical details (the whole of what is now page 2 is summarised in 3 lines), it describes a lead-of-a-small-company role which isn't likely to happen again (I'll more likely join an existing team than start a new one). Based on comments in http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=53244 I decided to add data (resume.doc), and then still try to have a presentable and chronological first page (resume2.doc/resume3.doc).
I'm not sure what you mean by 'just lists hilights, not every single thing'. I could drastically reduce the length of each sentence on page 2, and say for example ...
'Wrote a C++ library which wrapped the Win32 thread and synchronisation primitives.'
... instead of saying ...
'Wrote a C++ library which wrapped the Win32 thread and synchronisation primitives, to support the multi-reader / single-writer pattern, deadlock prediction and prevention, and thread performance monitoring.'
... but, well, it wouldn't be saying as much. Or I could have fewer items (sentences) per section, or fewer sections. I'm not sure what you're suggesting.
I thought about your saying that 'HR guys would look at your current resume, say 'overqualified' without even reading all the way through it', and cut a snippet from the top paragraph: it nows says ...
'Implemented much of the core, server-side, network, and database functionality (see page 2).'
... instead of saying ...
'Personally designed and implemented much of the core, server-side, network, and database functionality (see page 2) while other developers wrote client applications and server add-on features.'
... I think that's better for your suggestion. |
| Sun 29 Jun | Philo | 'ASPs' are MS 'Active Server Pages'
Then it's 'ASP', not 'ASPs' - thus my confusion. 'ASPs' is likely to be read as 'Application Service Providers'
Philo |
| Sun 29 Jun | Alex Rider | I am just wondering who is Emerick Rogul. |
| Sun 29 Jun | ymmv dude |
I don't think quality is equivalent to quantity, and it may be that there was something else wrong with your short version instead of length.
Maybe it was a problem of not enough buzzwords for the HR people, so your resume never made it into the hands of the technical, hiring people?
'Team lead and chief architect of a fax server product responsible for xxx in sales and a xxx return on investment' speaks for itself.
The technical hiring dude will understand that.
The HR person would think this is better:
Worked on a C++ blah blah Visual basic blah blah sql server blah blah.
That's why the hardest part will always be getting to the people that have the power to hire you. |
| Sun 29 Jun | Christopher Wells | Alex, Emerick Rogul posted his resume's URL in the earlier discussion, as an example of how you can fit a lot of useful information into a one-page resume.
===
Dude, it was funny your saying that the technical person would understand the marketing numbers, while the HR person would prefer the buzzwords; I hadn't thought of it that way.
Yes, I would like to think that 'Team lead and chief architect of a fax server product responsible for xxx in sales and a xxx return on investment' would speak for itself; but my experience with headhunters and Big companies has told me that:
* 'Team lead' can be misunderstood as project lead or director of development; with the first resume, I had people asking 'Do you want a coding role? When was the last time you did any coding?'
* 'Chief architect' can again be miunderstood as a non-coding role, responsible for specs and requirements but not even responsible for high-level physical/module design
* 'Fax server product' can be simply a bunch of scripts, driving prebuilt fax software components or driving intelligent fax devices which have the software on-board
I could condense the first 6 bullet items (18 lines) on page 1 of resume3.doc as follows:
* Self-starter, able to design as well as code, learns new technologies are required
* Works alone or with a team, keeps an eye on the business (deliverable software), knows about quality control as well as coding
* Experienced with the full software development lifecycle
* Suitable for roles that include customer-facing responsibilities
* Contributes to the system design and integration, has some experience with distributed systems
However, remembering back to the days when I was hiring, if I had read bullet items like the above in a resume I might have asked myself 'Where is there evidence of that? What if this is just copy-and-paste resume jardon, like 'Excellent communication skills, team player, able to multi-task'?'
I wish I could condense it further, but I don't see how to do that without losing data (I'd also like more white space, and perhaps a size 11 font).
One idea is to remove all items which aren't relevent to specific job applications; for example, remove the page 1 bullet items for junior/intermediate coding positions; remove the 'MFC and GUIs' section for server-only positions; remove the 'cross-platform development' section for Windows-only positions; remove the 'device drivers, and low-level programming' section for GUI positions.
Anyway, I've tried a highly-condensed version, and I'm not satisfied with its results; I'll try this more explicit version for a bit.
===
Philo, back to your '87-91 [...] feels weak, especially if you're looking for a coding job' comment. As it happened, I was doing tehnical writing: whatever the employer wants...
I had _some_ experience coding during those years; apart from writing a REXX script to convert from GML to HTML, I wrote a kind of program to write the _System Test Plan_ (because the test plan was subject to change, and I thought that the smaller program would be easier to edit and maintain than the expanded Test Plan); I taught myself Intel assembly on my home PC, in 1987; I taught myself C by writing a payroll program for Greenpeace.
I haven't mentioned those, partly to keep 'everything' on a single first page, partly because experience that is more than 10 years old 'doesn't count', and partly because non-commercial experience also 'doesn't count'.
If I were doing a three-page instead of a two-page resume, then I could mention those. And, in that case, I might very well put the 'Recent Projects' data inline with the chronlogical section. |
| Sun 29 Jun | Philo | Christopher, you might think of putting 'Technical Writer' in, to point up that that's what your job was. Just a thought.
Philo |
| Sun 29 Jun | ymmv dude - who wouldn't have it any other way | 'it was funny your saying that the technical person would understand the marketing numbers, while the HR person would prefer the buzzwords;'
Ha! :) Indeed, I've been working in unusual circumstances for too long I suspect, I didn't realize what I was saying! |
| Sun 29 Jun | . | Philo, fair comment ( about stereotyping ). I was just comparing different approaches to the way occupations are remunerated.
Christopher, all this agonising over the format of your resume is, I believe, missing the point. The resume is good. Maybe it's time to start your own product or business?
Secondly, in terms of addressing the core problem, your writing efforts might be better applied in writing to politicians and telling them to pull theirs fingers out. |
| Sun 29 Jun | save these instructions | Christopher, I think maybe . & ymmv are on to something. Maybe the problem isn't you or your resume, it's the companies you are targeting. I think Joel or Eric Sink (sourcegear, posts here sometimes) or somebody in that ilk would be much more impressed with 'Team lead of fax server product from cradle to grave, yada yada yada' than any list along the lines of 'c++, 4 years; vb, 6 years; sql server 2 years, etc...' I might be wrong though, maybe they'll chime in.
Now it may be a question that you would rather work for Fortune 500 BigCo rather than young scrappy LittleCo. I cast my lot with the small compaies though, and I get the impression that you do too. |
|
| Anyone tried C# Builder? | Fri 27 Jun | Philo |
| Im curious how it compares to VS.Net.
Philo |
| Fri 27 Jun | Cletus | Philo,
Didn't it just start shipping on 6/26? If so, it would be kind of hard to give an honest evaluation.
This may or may not help, but here's a link to a C#Builder site with some screen shots.
http://www.csharpbuilder.info/ |
| Fri 27 Jun | Philo | Oh really? I've had a flyer for it on my desk for two weeks - figured it had been out at least a month...
Philo |
| Sat 28 Jun | Rob Eickmann | Programers Paradise is listing the ship date as 7/26/03. (7/14/03 for the personal edition.) |
| Sat 28 Jun | Anon. Coward | Based on that link, I don't see the fuss. The IDE looks nearly identical to VS.NET, and the list of features doesn't appear to contain a single substantial feature that VS.NET doesn't already have. |
| Sat 28 Jun | Courage | 'Based on that link, I don't see the fuss. '
Coward,
I beg to differ. Since you haven't seen the product, your statement is not based on any facts. I think if you want more in-depth information on C# Builder you should go directly to the Borland website.
http://www.borland.com/csharpbuilder/ |
| Sun 29 Jun | Boris Yankov | In terms of features I really think that VS.net is better.
But well there can be a very important difference.
If it is a native app (the C# Builder), it is probably written in Delphi.
Or it can be written in C#. If it is, then it will be something like cross platform IDE once the Mono and eventually other implementations of .net for different platforms start working. |
| Sun 29 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | The one thing I use the VS.NET IDE for is Intellisense. If somebody came out with a C# editor (doesn't even need to be an IDE, as far as I'm concerned) that supported high quality Intellisense plus refactoring support, I'd switch in a heart-beat. |
| Sun 29 Jun | Chris Nahr | Automatic refactoring would be sweet. Add either makefile or NAnt support instead of those proprietary VS solutions, and I'll switch too. Intellisense is truly the one killer feature of VS.NET... the rest is just about passable. |
| Sun 29 Jun | Philo | The integration with SQL server is really nice too.
The WYSIWYG of ASP.Net pages is starting to fulfill the promises of FrontPhage, but it's still got issues.
But there's still room for improvement - it'll be interesting to see how C# Builder compares. My worst fear is that it will be a complement to VS.Net, so that it makes sense to do some things in one and other things in the other.
Philo |
|
| How do I get a job as an idiot? | Fri 27 Jun | Anon - in case YOU interview ME |
| Im serious. When I read all these posts on JOS about idiots whove gotten jobs as programmers, I have to think Im going about it wrong.
I got laid off recently and decided to go back and get a 2nd BS - this time in CS. Im not doing for the money - I truly like programming. But after seeing all the complaints on this forum about idiot co-workers, I thought, why get a BS in CS if I can just go into an interview and BS about CS.
Ive done a number of small projects using skills in C, VB, SQL, Javascript, and more Access than Id like to admit. But they were all small - not much to hang on a resume. Also, since I managed a department, I was my own customer.
But, I was always the type of manager who demanded credentials from those Id hire. Ive imposed the same set of standards upon myself, so I feel obligated to get a degree in CS. Maybe Im just being too tough on myself.
So, how are all these idiots landing jobs? Through contracting agencies, in-house promotions, regular job ads and interviews? What lets them slip through the cracks? |
| Fri 27 Jun | Phillip J. Eby | Interesting that you seem to think there's a correlation between formal education and skill. A lot of those 'idiots' have degrees, and lots of the competent people don't. |
| Fri 27 Jun | Philo | Yeah. I have a degree.
Oh, wait... dammit.
Philo |
| Fri 27 Jun | Mike Swieton | Phillip:
Devil's advocate here: A lot of skilled people *do* have degrees, and a lot of idiots don't, as well.
To the original poster:
Keep in mind the force of a negative: how many posts are there saying 'Wow, my bud Bob really is a great programmer! Aint I lucky?'? None; instead you get 'Dude, this guy is such an ass. What sort of evil plots ought I hatch?'. Why? Because good impressions haven't half the weight of a bad impression.
I doubt there's the overabundance of idiots that you suspect, especially if you know of them through posts here rather than through your coworkers. |
| Fri 27 Jun | Anon - in case YOU interview ME | 'Interesting that you seem to think there's a correlation between formal education and skill.'
I don't, and I don't know how you read that into it. People get jobs based on ...
1. Skills - i.e., experience
2. Credentials - e.g., a degree.
3. Networking - friends in low places
There seem to be a lot of people in this industry who've landed jobs without ANY of these three. How do they do it? |
| Fri 27 Jun | T. Norman | The idiots got hired during the boom when they were hiring anybody who knew what HTML stands for.
Or they were originally good when they entered the industry 20+ years ago, and got comfortable after a while doing the same thing year after year, and failed to update their skills or conceptual knowledge.
But idiots don't get hired anymore in this economy... with the exception of the places where idiots are doing the hiring. |
| Fri 27 Jun | Brent P. Newhall | T. Norman's right; idiots are hired because there are idiots in every industry, and some of them are hiring. We live in a fallen world.
Also note that 'all the complaints in this forum about idiot co-workers' are due to this forum's suitability for airing complaints. For every 'annoying co-worker' a person has, s/he probably has many more competent co-workers. |
| Fri 27 Jun | | But idiots don't get hired anymore in this economy... with the exception of the places where idiots are doing the hiring.
That's many places. I have hardly ever worked with people of the same skill level as posters on this board. Most of my coworkers treated programming as just a job and did not keep up with new technologies or even have an interest in them. In order to get a job you need to lower your asking price, work like a dog, and have a social disposition. |
| Fri 27 Jun | Just Wondering??? | 'When I read all these posts on JOS about idiots who've gotten jobs as programmers'
Anon,
What makes you so sure that someone out there from your past doesn't classify you as an 'Idiot'?
Just remeber that there will always be someone smarter than you and someone to let you know it |
| Fri 27 Jun | T. Norman | >'Most of my coworkers treated programming as just a job and did not keep up with new technologies or even have an interest in them.'
Lots of idiots have jobs already, but their chances of getting hired now are between slim and none. |
| Fri 27 Jun | everybody is an idiot but me | If we're honest with ourselves, the fact is we're all idiots from time to time. It all depends on your definition of 'idiot', one mans idiot could be anothers genius.
Common scenerio: Two programmers, one (A) technically hopeless and the other (B) a guru. A understands his real job is to make his boss feel special and important, so gets all the fringe benefits, raises and credit. B slaves his life away in a cubicle doing the work for which A gets paid.
Don't let wishful thinking fool you, all kinds of idiots get hired regardless of the economy. |
| Fri 27 Jun | S.C. | It is not that being idiotic is an edge. No boss intentionally hires idiots. It is just that how competent you are is not closely related to the chance of you being employed. So the number of employees not up to their jobs is higher than some people would expect.
And since the worst (and the best) people are usually easy to spot. So it gives an illusion of many people who get hired are incompetent. |
| Sat 28 Jun | Joey P | The amount of idiots hired for any given position is, on average, proportional to the amount of idiots available in the general population. |
| Sat 28 Jun | Not an idiot | You are all idiots. |
| Sat 28 Jun | Johnny Bravo | 'People get jobs based on ...'
Actually, in the company where I work, 10% of the workers got their jobs based on skills, 30% based on degrees, the rest based on friends.
Problem is: those 60% know that if they were fired right now they'd never get an equivalent job again, so they are trying very hard to hide their idiocy by lots of trickery a.k.a. politics, which is not only futile to hide from the non-idiots (i.e. the other 40%), but earns them wage increases every year. |
| Sat 28 Jun | | I think you should question the impression that there are lots of idiots. That sort of statement arises from business managements seeking scapegoats for poor project planning.
I also don't think it's an accurate representation of JOS discussion to say that concept figures prominently here. The opposite if anything. Almost all the programmers I've worked with have been excellent. |
| Sat 28 Jun | Barry Sperling | S.C.'s comment at the end of his post needs to be reiterated: if 20 programmers are in a project and only one is an 'idiot' then 19 can complain that they are working with an 'idiot', leading to 19 complaints on the net, but there is only one guy as the inspiration. And yes, I've felt like an idiot sometimes when an error of mine crops up... |
| Sun 29 Jun | | Based on this thread, I think we can safely assume that roughly 90% of the population are idiots. |
| Sun 29 Jun | sgf | 90% idiots?
You are an optimist. |
|
| Problem with colleague II | Fri 27 Jun | shiggins |
| Since everyone was giving such good advice, I thought Id post a problem that has been plaguing me for 7 mos.
An assistant was hired for me who thinks he is a programmer. He has not taken any programming classes ever, he has never written any production code, he once wrote an Access app at home. He is currently working through the Faster/Smarter series, Beginning Programming. I have no problem with helping newbies on their endeavor into the hell that is programming:) However, he has no desire to be/understand what programming is, IMO. He doesnt like problem solving, he wont/cant do thorough testing for me, etc. I believe he likes the idea of being a programmer. Hes one of those who, if programming didnt pay well, he wouldnt do it.
That being said, I find myself in discussions with him (we share an office) where he talks as if he were a veteran programmer. For example:
#1
Me: The client wants a search added
Him: That shouldnt be too hard to implement
Me Thinking: How the HELL would he know how hard it would be to implement?
Me: Ok, do you want to do it?
Him: Sure
Me Thinking: Over my cold lifeless body!
#2
Him: .NET is soooooooooo much better than Visual Studio. They have improved so many things.
Me: Oh, you used VS before?
Him: No but,.............more bs
#3
Boss: A new client would like A,B,C functionality
Him: That should be no problem
Me looking at my legs to make sure I havent disappeard.
Those three conversations happend in ONE day. It is getting to the point where management is calling him asking questions, which I answer and he gets back to them. In addition, there is that annoying Were programming buddies feeling that is about to drive me insane!
Ive developed this project for 3 years by myself. Hes been here 7 mos. Am I being petty? (Im pretty sure I am). How to I let this person subtly know that they are NOT a programmer, just as I am NOT a graphic designer, engineer, giraffe, whatever?
At the very least, thanks for letting me get this off my chest. |
| Fri 27 Jun | DingBat |
What exactly are the actual duties of this assistant? |
| Fri 27 Jun | shiggins | He was hired literally to help 'shiggins'. So his duties are very vague. We work for a manufacturing company. I'm supposed to give him stuff to do, like documentation, create this graphic for me, etc. |
| Fri 27 Jun | GiorgioG | So just be very diplomatic about it... Ask him to write a little asp.net web application that does something useful and make it so it isn't a trivial project. When he's knee deep in it, he'll ask for help and you can say 'Not as easy as you thought it was eh? Remember that.' |
| Fri 27 Jun | | Tell him to write a class for you that does this and that and give him a timeline that you think a new programmer could finish the work in. Also tell him that programming doesn't pay that well; if you want to make money be lawyer. |
| Fri 27 Jun | dmooney | Tell him next time somebody asks 'him' (meaning you) to do something, tell him that he must pass the question along to you and not to give off-the-cuff responses like 'that won't be too hard'. You're his boss. Tell him what to do. |
| Fri 27 Jun | Lee | I thought high paying jobs for inexperienced people left w/ the Dot-coms. Can you post a Part III where he gives job searching/interviewing tips? |
| Fri 27 Jun | shiggins | It's all about who you know. |
| Fri 27 Jun | Mike Swieton | It's interesting that a number of the suggestions here are very confrontational, along the lines of 'Give him a hard task, and tell him \'I told you so\' when he can't do it'.
Of course, he has to discover his skill level for himself: if you tell him he's incompetent (not that I'm saying he is, I can't really judge) he'll assume you're an ass. Not that I wouldn't, were I in his shoes... is there anyone here so gracious it'd be different?
Perhaps you need to talk to the person who hired him (it wasn't you, was it?). Tell them you're stuck having to find work for him, because what he does is unsatisfactory (it *is* unsatisfactory, isn't it? Or is he doing what you ask?). |
| Fri 27 Jun | Alyosha` | You need to find a project for him that is:
* long enough to keep him off your back and away from anything important
* short enough to keep his interest
* unimportant enough that the world will keep spinning if and when he fails at it.
* important enough so that he doesn't catch on to your plot.
Shunting the morons off to do the unimportant work is a time-honored tradition. |
| Fri 27 Jun | shiggins | Mike,
>>Give him a hard task, and tell him \'I told you so\' when he can't do it'.
I have no intention of doing this and I don't think that's what the posters are suggesting. I think the point is to give him some 'real' programming work so HE can see how he does and whether he really likes it.
Here's my only concern, that it would make the problem worse instead of better. Because he was given an actual project, regardless of whether he fails or succeeds, it would add fuel to his 'I'm a programmer' fire.
I can't talk to the person that hired him because they've been friends for years. See, it's all about who you know.
I like the suggestions though - keep 'em coming:) |
| Fri 27 Jun | njkayaker |
Are you supposed to be programming yourself?
Or are you supposed to manging programmers?
If you want a programmer, hire a _programmer_.
Definitely, don't give him answers for him to give to management.
Is he your 'full time' assistant? Do you really need a full time assistant? Maybe, you could share him with some other people. That way, he might have less time for 'programming? |
| Fri 27 Jun | Alyosha` | 'Regardless of whether he fails or succeeds, it would add fuel to his 'I'm a programmer' fire' ...
Don't knock it. If it weren't for this, someone of us would have never turned out to be decent programmers in the end ...
We were all in our larval stage once, right? |
| Fri 27 Jun | shiggins | >We were all in our larval stage once, right?
Absolutely. That's why I like your idea. I mean if he does well we're all better off right? |
| Fri 27 Jun | shiggins | >Are you supposed to be programming yourself?
>Or are you supposed to manging programmers?
I am supposed to be programming, not managing
>Is he your 'full time' assistant? Do you really need a full time assistant? Maybe, you could share him with some other people. That way, he might have less time for 'programming?
He is my 'full time' assistant, which I don't need. I do share him with other departments right now. He was actually asked to do other work because my immediate boss saw him 'playing programmer' knowing he is not one. I need another 3-5 exp. developer. I don't have time to 'train' someone who has never developed before. I have no say in the hiring. I've been asking for another developer for 1 year. This is what I got :( |
| Fri 27 Jun | Brent P. Newhall | It looks to me like this person simply doesn't know programming well enough to estimate programming tasks accurately. Is that correct, shiggins?
Okay, so he needs to learn programming. I say, give him a significant programming task. While I think you shouldn't come back and say 'I told you so,' I do think he needs enough practical experience to have a better grip on what's difficult.
Also, why is he answering the customer about features? Isn't he the junior developer? If so, he has no authority to answer the customer about features in a meeting like that. You need to tell him to stop.
What happened when he talked to the customer like that? Did you step in? |
| Fri 27 Jun | shiggins | Brent,
Actually, it was my boss, not a customer. I didn't say anything. I was wondering if I should talk to my boss. Just to see if there was a specific reason, I was not asked, even though I was sitting right there. It could be something as innocent as my boss knowing how swamped I am. In which case, it would have been up to my assistant to say 'I'm not qualified to answer that.' What do you think? |
| Fri 27 Jun | Danil | Sounds like an estimating exercise is in order. If assistant proposes an unreasonable schedule, ask him to break it down into pieces. Either there are individual estimates which are off base, there are pieces missing, or he's found a new way of doing things that is worth learning.
That this exercise is conducted on the spot, with no time for advanced prep, in front of an audience, may help accelerate the learning process. Especially if you have hard data on tap that challenges those assumptions. |
| Fri 27 Jun | e | This guy is just doing what most young graduates and other young employees do - trying to 'be sociable,' impress the boss and demonstrate a strong 'work ethic.'
He has not yet learnt the importance of saying: 'I don't know,' 'No, that can't be done,' or whatever.
You need to be very direct with him and tell him when he doesn't know something or when he's doing something that's foolish. This can be done in a non-criticising way.
You also need to be direct with the manager who hired him, and point out the current limits to his capability, and the effect of this on you. Perhaps you could identify some role thing that would be more apprpriate for him. |
| Fri 27 Jun | Pete J | Write the estimate yourself. When people see longer times and a smaller scope they will ask why. You will tell them.
You can do this without criticising or putting anyone down, you will simply let him dig his own hole. He can't refute your estimates, because he has no basis.
Give him simple tasks and tell him how to do them. Check his code, tell him what's wrong and make him correct it.
If he's smart he will start asking you for advice, he will learn and you will get a useful assistant. If he's not smart he will dig himself a huge hole and you will have no choice but to imform your boss.
Basically, you give the guy two choices, a good one and a bad one. Most people like the good choices. You should be able to do this without being harsh or nasty.
Finally, next time someone asks him a question that they should be asking you, simply interrupt. If that's not possible, correct him straight away, or say 'Actually we need more information before we can give a proper estimate. I wouldn't want to mislead you.' |
| Sat 28 Jun | Not an idiot | The true problem here is that you are threatened by your assistant.
Maybe the new guy could do it, even though he's only got 7mths experience.
I highly doubt it, but you're not sure about it and it's making you edgy.
Just because you think it's easy doesn't mean it is. |
| Sat 28 Jun | Jimmy Chonga | There are two alternate situations that I've seen in various workplaces:
-People give grossly bloated estimations that hint that either they're padding for months of Tetris playing, or they can't hack it and are building their own perpetual ignorance in. Furthermore, if anyone estimates a smaller number, or calls them on their estimate, they proclaim that it's their vast experience and Gandalf-like wisdom that leads them to their estimations, and anything less must be naive and misinformed. I've personally been in several situations where I've questioned estimates, and then provided my own (to be met by the poo-poos of 'oh, that's just naive crazy talk!'), and then I take on the project and come in under time, under budget, and with all of the features, functionality and quality expected (and I don't work overtime as a general rule, though my output far exceeds most coworkers who work tremendous overtime. I've come to believe that overtime is largely a ruse to deflect blame for gross incompetence when deadlines come and go...'Oh, but I worked so much overtime ineffectively getting nothing done'). i.e. The lesson here is that simply sitting back, scratching your beard and proclaiming that it's all going to take forever doesn't make you a master. I should not that when I question overestimations I only do so with the approach that I'll do it if necessary, if they truly don't believe my estimates.
-On the exact flip side, I've seen young bucks who grossly underestimate the scale or scope of a project: Hierarchical data warehouse for a enterprise with a vast range of implementation requirements and details -- No problem! That should take a week at most! Of course these statements are made in a situation where they themselves will never have to implement, so basically their comments do nothing but to undercut the entire project: If you work 24 hours/7 days a week and pull some genius inventions out of your ear, you still haven't met the grand standard set by the 'no problem' person. I suspect this is the problem that shiggins is having. I find this thread hilarious because an individual who did exactly what shiggins is describing (providing his opinion about the trivial, easy nature of everything) first name started with s, and last name was higgins.... Weird, no? |
| Sun 29 Jun | Sam Livingston-Gray | I dealt with something similar to this once... actually, now that I think about it, more than once. When I was working for a largish law firm, there were some people in the word processing department who wanted 'database analyst' as their title because they Knew Access (capitalization intentional). To their credit, they'd gone about as far as it's possible to go in Access while using only macros... ;>
What worked quite well, actually, was just offering some very basic direction. They wanted to know how to accomplish some task or another, so I told them (at a relatively high level) how I'd do it, showed them what F1 did in a code module (this was 97, when the online help was actually still helpful), mentioned that the Recordset object was what they wanted to play with, and told them to poke around with it and call me when they had something for me to review. Never heard back from 'em.
I'm always happy to help newbies get into programming (heck, in many ways, I'm still one myself, having only been doing it for five years), and would have been happy to play mentor, but it wasn't going to happen for them -- and this was a relatively gentle way of letting them discover that for themselves.
So I suppose I'm seconding the suggestion to stick him with a real programming project (real is in actually writing code, not real as in work product anyone will ever see), but with the difference that you allow him the possibility to succeed, and actually give him a hand when you have time.
If he's remotely clueful in other ways, you might email him a carefully-selected entry from the Jargon File... in fact, 'larval stage' might actually be appropriate. ;> But that's definitely a judgment call. |
|
| Compile Times | Fri 27 Jun | Andy |
| Someone recently wrote:
Even so, C++ is slow to compile. My C# projects can compile 10x -- sometimes even 50x -- as much code in the same time as the C++ compiler.
1. Is this true? How do you measure how much code there is. Lines, statements? Typically in a higher level language each statement will be compiled into more instructions, but the comparison between C++ and C# is hard because one compiles down to machine language while the other does not.
2. MOST C++ projects I would say have less than optimal physical designs (a term I would attribute to Lakos), i.e. the header structure is a f***ing mess. If you could get rid of the idea of translation units in C++, and maintain what I guess is a database of types and prototypes across files, would it speed up the compilation or not?
3. Is there anything else in the C++ langauge that would make it slower to compile than C# or Delphi or whatever.
4. Any comments about the effect of optimizations on compile time.
I am interested in this because it seems like compile times are a problem for rapid development. Its harder to get in the groove when you make a minor change a header, then have to recompile half the damn project before you continue.
It would be nice to hear from someone who has written a compiler, and not just wild speculation. |
| Fri 27 Jun | Len Holgate | I find that the compile times for some C++ projects are bad purely because of the physical design issue.
The coupling is often screwed and every file pulls in far more than it needs. Reducing the coupling quickly improves rebuild times and also means that an isolated change doesn't cause the whole world to rebuild.
I blame precompiled headers and the wizard way of 'include stdafx.h' everywhere. It may speed things up if done properly but the additional coupling isn't worth it IMHO.
I'm currently dealing with this kind of thing for a client. I've reduced the build time considerably by reducing unrequired coupling.
So, to answer your question ;) I think C++ allows more scope to screw up the project structure than C# does... |
| Fri 27 Jun | Mike Gamerland | This has the taste of urban legend. Before I believe any language can compile the same function/feature set 50x faster, I would like to see independent benchmark examples. This with real side by side comparisons of the code, functionality and compiler output.
Compile time is a developer issue. For non-trivial systems, inefficient compiler output is worse than making you wait. |
| Fri 27 Jun | K9 | I have worked a lot both in Visual C++ and Delphi, and I can tell you that the compile speed of C++ is much lower than that of Delphi.
The compile time is the main reason I want a very fast machine. |
| Fri 27 Jun | Ajit | True, the effect of pulling up far more code than required is one helluva problem. I found that just taking all those header & cpp files which are normally just helpers for all the other code & which change once in a millenium :) out & making a separate dll out of them improved build times a lot. |
| Fri 27 Jun | jedidjab | Does anyone have good links to sites that explain the best way to reduce coupling in header files? Examples would be really handy too... |
| Fri 27 Jun | Sebastian Wagner | While physical structure is a major point, there is one feature of C++ that can arbitrarily lengthen compile times which other languages just don't have: templates. Compile-time programming obviously can result in longer compile times =) |
| Fri 27 Jun | Frederik Slijkerman | Why exactly do templates increase compilation times? |
| Fri 27 Jun | - Roland | It turned out that C++ with templates constitute a full-blown 'meta programming language'. You can do type computations, conditional statements, loops, (type) list processing etc. These are all compile-time computations, i.e. you abuse the compiler to do such calculations, which costs time. For more info, see http://www.boost.org/libs/mpl/doc/paper/html/index.html
No linker can deal with templates properly; I once heard that templates in C++ were the first feature that was beyond the abilities of old C style linkers. Can't say much more about the deeper reason, however. |
| Fri 27 Jun | Mike Dimmick | I can tell you from experience: C++ is damned hard to parse, because the language is about 60% ambiguous. C# and Java are simpler and can be approximated with an LL(k) parser. To write an intelligible (hence maintainable) parser for C++, IMO, you really need to tackle it with a Generalised LR parser that can cope with the ambiguity by spitting out an ambiguous parse tree. The only other way is essentially to merge the tokenising, parsing and symbol lookup phases with feedback.
One reason the toolset for C++ is generally so poor when compared to other languages is simply due to the ambiguity. It's really hard to get useful information. As I've posted on another thread, part of VC6's Wizard problems, where the Wizards can get confused and trash your source code, comes from the fact that there are at least five parsers, each of which reads the code in a different way: ClassWizard, ClassView, IntelliSense, Browse Information. Oh, and the compiler itself, of course ;)
I still prefer it to anything else, though. Clearly humans (or at least, some humans) can cope with more ambiguity than our current parsing algorithms can. Of course we all get tripped up occasionally where a whole statement could be read in more than one way, and the disambiguating rule in the language standard works the other way to what we were expecting (example: if a statement can be read as an expression or as a declaration, the declaration wins - you can then get semantic errors if it wasn't intended as one).
Anyway, that's one reason C++ compile times are longer. Another reason is size of headers and templates. With metadata-exposed languages like VB, C# and Java, once a module is compiled, the compiler can read the exported declarations directly. The C++ compiler must read the header file completely, preprocess it to remove sections and comments, include contained header files, then parse the declarations and add them to the symbol table, even if few of the functions are used.
If you're compiling for Windows, you'll typically be including windows.h. This includes a whole load of other headers, which are huge - typically 13000+ lines.
If you have the option, use precompiled headers for anything you don't expect to change (the Windows headers are a good start). If you have a mixed C/C++ program, try to compile the whole lot as C++ if you can, or try two different precompiled headers, one for the C parts and one for the C++ parts. Alternatively build one or both parts as static libraries and get the linker to put it together. That way you can get precompiled header benefits on both parts of the program.
Other suggestions: use #pragma once with Visual C++, which will cause VC not to even try to read the header if it's already included. It's rare that you'll want to include a header more than once in the same translation unit. If you can't do this, another good trick is to surround your #includes with #ifdef commands. An example: say the file MyHeader.h uses a #ifdef guard of __MYHEADER_H__. In a file that includes it, do something like:
#ifndef __MYHEADER_H__
#include 'MyHeader.h'
#endif
This stops the compiler having to locate the file, open it, read the header guard #ifndef and then read the whole file to find the matching #endif. Compilation is largely I/O bound. |
| Fri 27 Jun | runtime | C# has fewer file dependencies than C++. If you change one C++ header file, then tons of .cpp files (that #include the header file) must be recompiled. Since Java and C# don't have header files, you just have recompile the on .cs file. |
| Fri 27 Jun | David | Funny this topic should come up. I spent a couple of days earlier this week trying to decouple headers in my project. After two days of this (remove, compile, fix errors, repeat), I had removed many #includes and made NO measurable improvement in compile time.
So, I quit trying to do that.
BTW, this is Visual Studio .NET with C++ code.
Anyone know of some quick tips or tools to make this effective? |
| Fri 27 Jun | Andy | Well, it seems to me that the simplest possible solution to improving compile times is just to split up your C++ files. I have seen files that are 7000-8000 lines long, which I think is ridiculous. I heard somewhere that 500-2000 lines is reasonable, I find this to be a good rule of thumb. I would like to have less than 20 functions per file.
When you split, of course you have to remove #includes that are no longer needed. If you find that the splits haven't resulted in removing #includes, then perhaps your logical design has too many dependencies, and you will actually have to change code to get your compile times to be faster.
The reasoning here is: If you change a type T, you have to recompile ALL THE CODE that #includes the header which contains T. That includes functions that just happen to be in the same file as a function which needs T, but which themselves do not need T. And that includes entire files that just need the header for type T2, and not T. So basically from that you can infer that statistically speaking, changing a header will require you to compile less code if your source files are on average smaller.
That said, I would say for many projects, there are simply unneeded #includes, or #includes that should be in the C file but occur in the .h file. Getting rid of these obviously comes first. Think about it: when you delete some code, do you always look at the #includes to see if there is anything you can delete? Probably not.
Do any compilers do any sort of caching that basically invalidates what I just said? |
| Fri 27 Jun | Andy | Also, to Mike Dimmick:
I have heard that C++ is very difficult to parse and I can easily imagine why. In fact I heard that many major compilers all use the same 'front end', the EDG one. If I am not mistaken, the front end for a compiler includes the parsing engine.
What do you mean by C++ being ambiguous? I mean it obviously isn't ambiguous in one sense because the standard AFAIK specifies what every statement is supposed to mean. But yes there seem to be a lot of hacks, like the typename keyword, and having to do > > to end nested templates because of ambiguity with >>.
What about VC7? I heard there is a source code model to programmatically access C++ source. Does this work well? Or does it not go down to the statement level? |
| Fri 27 Jun | Tom |
If your project is not specifically set up for precompiled headers, you will probably get a speed boost by turning them off. So that is one thing to try.
(The reason is, I believe, that VC++ precompiles headers for a specific sequence of #includes with a specific set of #defines, so with auto use it will rebuild them afresh for each file where a new sequence occurs.)
Add WIN32_LEAN_AND_MEAN to your predefined preprocessor symbols if you are including windows.h a lot.
If you want to try adding precompiled headers to the project, you can get a demonstration of how they should be set up[0] by setting up a new console application with precompiled headers using the new project wizard. All files have set 'use precompiled header' with the name of a .h file; a single .cpp file has 'create precompiled header' with that .h file; _all files_ #include that .h file as their first one.
Include your headers-that-don't-change-often from this .h file, and hopefully you will then have decreased increased compile time.
Whilst this can help compile speeds greatly (it's a real pain compiling others' projects when they don't use this!) it's obviously not always the easiest thing to retrofit to an existing project :(
[0] -- well, there may be some other ways! |
| Fri 27 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | It was me who made the claim. I have two comparably sized projects, when considering on-disk size. In order to test, I did two of each compile type, and used the second (faster) compile. I have 1GB of RAM, so all the files can easily fit in the disk cache (and on the second compile, the disk doesn't make a sound).
The machine is a P4-2.53GHz, 1GB of DDR333, 80GB ATA-133 drive with 8MB on-board cache, running Windows XP Professional and Visual Studio .NET 2002.
One is the current C# project I'm working on. It's made up of 2533 .cs files comprising 5.4 megabytes of source code. It draws from most of the major parts of .NET, including ASP.NET and ADO.NET (no Winforms).
The other is a C++ project I worked. It's made up of 434 .cpp files and 706 .h files comprising 5.9 megabytes of source code. It draws from ATL primarily, with no MFC support. It's properly using pre-compiled headers, and most of the code is relatively de-coupled.
C# (full recompile): 7 seconds
C# (incremental compile, nothing changed): < 1 second
C# (incremental compile, 1 file changed): < 1 second
C++ (full recompile): 2 minutes 46 seconds
C++ (incremental compile, nothing changed): 10 seconds
C++ (incremental compile, 1 file changed): 18 seconds
Just to verify that my pre-compiled headers were doing their job:
C++ (full recompile, PCH turned off): 10 minutes 5 seconds
Draw your own conclusions. |
| Fri 27 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | 'The comparison between C++ and C# is hard because one compiles down to machine language while the other does not.'
I disagree. MSIL is nothing more than a high level assembler. Emitting the appropriate assembler or byte-code is hardly the most expensive part of the process, unless you're doing EXTREME levels of optimization. The problem, as others have pointed out, is that C++ is hard to parse, has no standard meta-data, and has a poor architecture (header files). |
| Fri 27 Jun | Mike McNertney | Brad, you're right that it probably doesn't account for the majority of the difference, but the fact that C# compiles to IL is definitely significant. The compiler doesn't have to do things such as register allocation (I assume at least, I can't imagine it having to do this if the IL is in any way platform-independant). Since register allocation is an NP problem this could be a substantial time savings (though I have no idea how long it typically takes since obviously compilers don't implement perfect register allocation). I'm sure there are other examples of optimizations that can take a long time that C# doesn't do when compiling to IL.
However my guess is that you're right in that the majority of the difference is because of parsing and the poor architecture of C++.
Your example may also be extreme if it uses a lot of templates. Templates in my experience tend to slow down C++ compiles drastically. |
| Fri 27 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | You couldn't pay me enough to use C++ without templates. :)
You're right that registers are not an issue. I forgot about that. The .NET execution environment is stack based, not register based. |
| Fri 27 Jun | Phil Steinmeyer | FWIW, out project, 5.3MB of cpps (in ~300 .CPP files), 1.2 MBs of .hs (a game, using windows.h, but no templates, MFC, etc, and properly using PCHs and LEAN_AND_MEAN) takes about 2 minutes for a full rebuild, ~10 seconds for an incremental, and from 10 to 40 seconds to link depending on how balky the linker is.
So that conforms pretty closely to the other example. I'm really surprised C# can do a full compile on something of that magnititude in 7 seconds -I'd kill for 7 second full compiles. |
| Fri 27 Jun | Andy | Yes, I'm extremely impressed by 7 second full compile too, even if it were a much smaller project. Just changing one line in a C file takes about 7 seconds in my current project (a mess, as I already said).
What about Java? Can anyone post some similar results? What about other languages?
Speaking of compilation being I/O bound, the compiler is a separate executable in VS.NET (cl.exe), so I would guess that every time it runs it reloads the source files from disk. Is this true and does it matter at all? I mean, maybe one advantage of an IDE over command lines tools is that it would be possible to keep a lot of stuff around in memory between iterations.
Another idea I had is that it is if you're working on a team of 15 people, and one guy changes a header, the next time everyone else does a get, it will take say 3 minutes to recompile. That's 3 x 15 = 45 minutes of lost time. Over time this adds up, obviously. If you're not working on that section of the code, there is no reason for you to recompile it, the other guy's compile will be identical to yours. Since C++ has the idea of translation units, it should be possible to figure out which object files do not to be recompiled. Basically the idea would be to have some sort of system for distributing the object files compiled by the first person. I know a lot of compilers don't keep around separate .O files anymore, buut just checking in the O files to source control might sort of work, except I don't know about merges and all that.
I know there is a distributed build product for Visual C++, whose name escapes me at the moment, but it's not quite the same idea. |
| Sat 28 Jun | Chris Nahr | Re I/O: Visual Studio .NET requires all C# source files to be saved to disk before compilation can take place so I'd guess that they're read from disk, too. Also, the examples given in this thread were fairly big -- I doubt they have all those hundreds of source files loaded in the IDE!
For what it's worth, on my system VS.NET takes about 10 seconds for a complete rebuild of a solution with 4.6 MB of C# source code in 208 files. Partial builds are faster, of course. It's so fast that I've adopted a 'change a few lines, recompile, test' style of programming because there's hardly any time lost doing so. Truly a huge change from C++. |
| Sat 28 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | In VS.NET, there are internal parsers, obviously, used for the wizards and the while-you-type parsing errors/compile errors (depending on which language you're using), but actual compiling is done by the SDK command-line compilers, just as prior versions of VC++ have launched the external commands to do their work (cl, link, midl, etc.). |
| Sun 29 Jun | Andrew Reid | Java compile times are probably comparable to the C# ones (ie really, really fast).
I think a big part of the C++ problem is the header files (as had already been mentioned several times).
The advantage that Java has is that it's easy for the compiler to glean class definitions from compiled bytecode, whereas C++ has to parse source every single time. Moreover, the C++ compiler can't assume you haven't modified the meaning of a class definition with preprocessor tricks fromfile to file.
This is why precompiled headers are such a big win (a project I worked on managed to reduce full builds from 1 hour to 10 minutes by getting precompiled headers working) - they remove a lot of unnecessary repeat parsing. |
|
| Time for comic relief | Thu 26 Jun | Eric W. Sink |
|