Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×

Comment Restricted stock shares are the new options (Score 1) 524

Options are ancient history in big companies.

By the time I got there in 2006 Microsoft was issuing restricted stock units - regular stock that you gain control of as it vests. When I went to Amazon I got RSUs there too. Valley companies seem fond of them as well.

Options today are mostly for startups where the current value is approximately zero which means there can't be a down side; although it's usually possible to convert those to restricted stock via early exercise, at which point you can make an 83(b) election to establish a low basis and start the clock ticking on the year after which any upside will be taxed as capital gains.

Comment You mean how do you deal with incompetentance (Score 1) 509

>As an example: I work with a developer who is 10 years my senior, but still doesn't understand how to write concurrent code and cannot be trusted to use a revision control system without causing a mess that somebody else will have to clean up.

The developer in question just isn't competent. Concurrent programming dates to at least 1950 and SCCS came about in 1972.

>So, how do my fellow Slashdotters handle situations like this?

Avoid them where possible and work around the damage. For instance good test automation will limit how long their mistakes go undetected.

>How do you help somebody like this to improve their skill-sets?

You don't. Understanding concurrency is one of the programming aptitudes which can't be taught.

Comment Re:99% - 47% = 51% ?! (Score 1) 526

The 47% is almost accurate - in 2011 46.3% of American households did not pay income tax.

28.3% are working but earn too little. Average 2012 income tax rates for the bottom two quintiles are -6.9% and -1.3% respectively due to refundable credits.
10.3% are elderly and didn't save enough to make their Social Security benefits taxable.
7.9% fall into some other category of non-income-tax payers like the unemployed.

This is because America's income tax system the most progressive (ratio of tax to income shares for the top earning decile) out of the OECD 24 which includes Australia, Austria, Belgium, Canada, The Czech Republic, Denmark, Finland, France, Germany, Iceland, Ireland, Italy, Japan, Korea, Luxembourg, The Netherlands, New Zealand, Norway, Poland, The Slovak Republic, Sweden, Switzerland, and The United Kingdom.

It was Bush 43 who moved us from second to first place.

Comment Process is about religion not logic (Score 1) 366

The fundamental problem is that this is a religious issue for both engineers and managers. People generally don't believe until they personally witness the miracle of rapid development with predictable schedules and low customer visible defect rate.

Working solutions in order of increasing time + difficulty:

1. Quit and either start a new team or join an existing one with decent development practices (I insist on a code and test process walk through of every company I consider joining to avoid unpleasant surprises. Obviously this fails for groups yet to build a product, and sometimes teams panic when pivoting and abandon reasonable practices).

2. Get promoted to a leadership role while you remain hands on. Tell every one else to do the right thing like you're doing - getting people to buy in is easiest when you're not making them do something you won't like the case would be with a non-coding manager. Most people fall into line with direction from above. Peer pressure works for most hold-outs. Any one not getting with the program can be replaced.

3. Do the right thing on your code. With your process producing a faster more predictable release cycle you'll have higher productivity and can take over an increasing fraction of the product so the bad people with bad process have less impact.

Applying test driven development variants to new features/subsystems/products helps a lot here because it makes shipping without good test coverage and short predictable cycle times impossible because no product code exists without the necessary infrastructure. While a "code complete" milestone may be farther into the future depending on how that's defined the total time to deliver the project will be lower and ultimately it's the ship date that matters.

Do the same for bug reports. Every reproducible bug gets an automated test case (if it broke the first time it's complicated enough to break again).

After a couple years you should be in good shape with enough infrastructure that the cost to add test cases is effectively zero before their benefits are considered (Perhaps most notable is that the requirement for incremental testing leads to cleaner interfaces which make complexity more linear with respect to project size. That in turn produces a lower defect rate, faster turn around time on repairs, and makes defect rate/time to repair more constant and predictable) and you don't have to worry about new people (or old people who haven't touched a piece of code in a while) breaking things accidentally.

Here are some things which don't work:

1. Talking to your co-workers about doing the right thing

2. Providing anecdotes (personal and otherwise) from other companies about the benefits

3. Buying everyone a copy of a book like

_The Clean Coder: A Code of Conduct for Professional Programmers_ by Robert C. Martin

http://www.amazon.com/The-Clean-Coder-Professional-Programmers/dp/0137081073/

Quote:
The jury is in!
Te controversy is over.
GOTO is harmful
And TDD works

in their choice of print or Kindle edition with the direction to read it on "company time."

4. Doing the right thing and providing metrics on things like defect rate, time to repair certain classes of bugs, number of release candidates for a feature, etc. This can be very striking - memory corruption bugs made reproducible by the test environment so you fix them in 30 minutes versus three weeks for co-workers' similar bugs, a major subsystem with no QA or customer visible bugs or just one of each, etc.

Logical people would get on board after seeing such evidence, but this is about religion not logic.

Comment It does not work that way (Score 0) 433

Employers are terrible at evaluating candidates. Can't tell a good programmer from a smooth talking bullshit artist. Nor, on the more subjective criteria, are they much good at telling the crazies apart from the merely desperate. The best they can do is hit prospects with a test on trivia about a particular language, the sort of stuff you shouldn't memorize but should look up in a reference. Quick, name all the reserved words in C++! If you can't do it, then you must not be an expert C++ programmer. If you try to explain why knowing that is not important, then you get that question "wrong", and are tagged as a BS artist to boot. I've had a so-called technical interview end after just 1 trivia question. They refuse to allow any time for training, demanding that new hires "hit the ground running". Candidates are expected to train themselves at their own expense beforehand.

Nope. I can accept that things happen differently in non-technical mega corporations and/or places without a critical mass of software people, although companies where software is core in viable startup hubs don't do that with "core" defined in Moore's core vs context categorization. Context activities are things that businesses must do like E-mail but doing them better than their competitors like sending messages in 10ms not 100 doesn't impact the bottom line. Core activities are those which do - better scalability and WAN optimization lets a cloud backup company serve bigger customers which pay more.

All but one out of a dozen places I've worked over 19 years in Boulder, Seattle (plus the East Side), and Silicon Valley did not do things the way you describe. Every competent software engineer who's worked in industry for a while knows that programming aptitude can be sanity checked in an interview, that knowing trivia is orthogonal to being able to do the job, and that other competent engineers will quickly pickup a language or library they're not familiar with (which is the easy part) while not so good engineers who know a language will never gain aptitudes they lack. Decent managers leave technical hiring decisions to a potential employees' peers.

Microsoft hired me to write C# professionally although I'd never seen the language before. I worked on Amazon products written in Java although I'd seen it once professionally.

There seem to be several aptitudes

1. Thinking through problems logically, identifying their edge conditions, and expressing a solution

2. Indirection

3. Applying knowledge to engineering problems

4. Parallelism

5. Recursion

which people have or don't.

In theory all should be pre-requisites for a computer science degree although in practice that is is not the case. My favorite professor taught data structures, graded students based on how their code did compiled and linked against teaching assistant defined automated test suites, and allegedly failed 1/3 of the class. The department wasn't happy with the failure rate (presumably due to their share of tuition dollars when people were forced out of a CS major) and replaced her. Graduates I interviewed for positions in industry before the faculty change were usually worth hiring. After they had a 50% reject rate.

I ask all candidates simple questions out of the first four categories, two with code. No trick questions. Engineers which do well as employees tend to make it through the current first question in under 10 minutes and the rest under 5 after which we can talk about projects and process. When I was young and naive I caved to management and overlooked a few problems but have since learned my lesson. People you don't want to hire can spend 45 minutes on one and not get to an answer. Probably 99/100 contingency recruiter submitted candidates don't do well there (I like to think that's because the vast majority of people you want to work with already have jobs, as opposed to there being that few competent people).

When it comes to projects I don't care how relevant what candidates did is to what my group is currently doing because they'll pickup the domain specific knowledge on the job. I sanity check that knowledge of what their resume said they did is consistent with actually doing it. I look for projects which are significantly meaty for their time in industry - while some jobs don't give you the opportunity to do neat things, after enough job changes failing to do that suggests a lack of motivation or aptitude neither of which I want. I look for scope and depth surrounding their work - successful software people are curious and absorb facts (like new domain specific knowledge) and I need them solving business problems as opposed to implementing code snippets I decide on.

I look for an increasing emphasis on software process with employee experience. Some places do things poorly, although once a candidate has had a few jobs and read some literature they should have strong ideas on how to avoid things detrimental to fast and predicable development cycles.

I only ask language specific questions where I'm concerned that a candidate isn't being honest on their resume. Some one claiming to have used C++ for a decade should be familiar with STL containers although they may have paged out minutia like the iterator, bool ordering in the pair which comes back from a std::map insert.

Pretty much everyone I've worked with and would want to work with again interviews the same way.

Comment Re:tech is a fairly broad category (Score 1) 660

_Starting_ compensation packages for new BS graduates at the big SF bay tech employers are north of $100K.

http://www.netpaths.net/blog/starting-salaries-of-top-technology-companies-apple-google-microsoft-facebook/

Compensation packages for senior staff / principal level engineering positions for guys 15+ years into their career with meaty projects under their belt (fifteen years of entry level work won't do it) and no management detour at profitable companies are over $200K

In spite of that positions go unfilled.

Comment Re:I can assure you... (Score 1) 642

Not true since Vista. Slashdot is full of folks who've last used Windows more than 10 years ago and thus complain of things like bluescreens, bloat etc. which makes them look like idiots.

Get with the times and at least update your hate machine.

Right!

My Dell Studio 15 with Windows 7 doesn't blue screen

  Instead it becomes extremely sluggish, unresponsive to mouse clicks, and I can't successfully start a task manager to see what's going on or get it to shut down normally so I need to use the power button instead.

I only use it for running Google Sketchup, Taxcut, Firefox, and the Mcafee anti-virus software which seemed like a good idea at the time.

Comment Re:I work with CS grads... (Score 1) 322

As a web-dev... I work day in day out with CS grads. As an engineering major, what my observation is, they are pretty bad at seeing the "big picture", and more often, very bad team players.

Your CS grads don't do so well because they're inexperienced at such things and most of their post-pubescent life was spent where distraction by the big picture and being a team player had negative effects. Assuming you've done a reasonable job filtering out defective personalities in the interview process with a little mentoring they'll outgrow those problems and get back to sharing and being team players like they were in pre-school.

Exams and projects revolved around a relatively small set of facts and shallow
generalizations (it doesn't take much to wax eloquent for an hour or so). Any attention to the "big picture" which isn't covered detracted from time spent on the things which get you grades, college credit in high school via AP exams, admission to good schools, and scholarships. This was especially true once they got to college where accrediting organizations credit hour allowance is way out of whack with the amount of work some professors expect.

The few joint projects through that time period generally involved two people doing about the same thing (like alternating cuts on a rat) at the same time for a day. Outside those projects collaboration would have negative effects on the grading curve.

My computer science program only required one group project (three people where expected to spend a year doing something real for a company in industry) and that was unusual.

Comment Re:seriously? not this again (Score 1) 233

I agree with your premise there are lots of "developers" who have worked on a project that used technology X... And realistically only a couple members of any team are producing 70-80% of the code, but the recruiting agencies and HR depts are a huge part of the problem. I am (no really) in that 5%, but I have the hardest time finding jobs, because I've worked all over the map... From designing huge networks, to automating deployment of tens of thousands of network devices, to DB design/DBA type work, to software design, development, etc both web and client based.

If you don't need to beat recruiters off with a stick it's because you're not using linkedin, live in the wrong place, or have big resume problems.

If you're at a career point where you're not satisfied with the jobs within your social network you need a linkedin presence (I'm trying for a start-up home run so I can retire and bootstrap my own companies without giving up my middle class lifestyle. Connections at big companies, small companies unlikely to see exponential growth, and startups with bad business plans don't get me there).

If you're really into writing software you should probably live someplace where there are lots of businesses where doing that well is essential to the bottom line. There's the SF bay area and every place else (41% of 2011 venture capital spending went to Silicon Valley and San Francisco ranks high too). Austin, Boston, Boulder, Raleigh, and Seattle/the East Side are most of the rest. Those places have higher costs of living where the salaries don't quite compensate although you probably spend more time working than anything else and are likely to be happier with the better job and a smaller home where you spend less of your time.

List all of the key words you've worked with. Eliminate those you don't want to do again (for instance, I don't like dealing with the Microsoft tool chain or library issues so I don't admit to having worked with C# even though I did so as a Microsoft employee.). Now you have your bases covered for recruiters, big company HR, and their key-word matching software.

Sort into categories somewhere along the expert / experienced / other continuum so you are not mis-representing your skills to the technical staff that interviews people and makes hiring recommendations.

If you are answering recruiter's emails and phone calls but not getting interviews it's because you have resume problems. The meat of your resume is written for engineers and managers. Engineers want to see what you personally accomplished technically. Managers want to see what you did in terms of leadership to deliver products sooner / more predictably / with lower cost and how your technical and non-technical contributions improved the bottom line.

If you're interviewing but not getting job offers there are problems with you.

I need to see that senior candidates have built bigger and more complicated things than junior candidates. I accept that in many situations candidates were limited by what was on the table, although after enough positions if they're not doing big things it's because they're either not interested or not capable in which case I'm better off hiring a less experienced candidate that I can grow.

I expect senior candidates to have practical experience with process and the things surrounding writing code and value doing them well because it makes delivering products faster, more predictable, and more pleasant for everyone. I've seen some real stupidity from executives "test code doesn't ship to customers" "we'll add quality later" and accept that many people spend time working in such environments, although after enough positions if they're not doing things it's because they're not interested enough in their craft do do a little side reading and experimenting or they have attitude problems ("I'm too good for unit testing!") in which case I'm better off hiring a less experienced candidate that's more likely to be trainable.

I look for four aptitudes in all candidates

1. The ability to think logically, identify edge conditions, and express that

2. The ability to deal with indirection

3. The ability to apply knowledge to engineering problems.

4. The ability to grasp parallelism

with a set of questions covering them that changes some with time. There aren't any trick questions here - engineers which do well as employees tend to make it through the current first question in under 10 minutes and the rest under 5 after which we can talk about their work history and other things. When I was young and naive I caved to management and overlooked a few problems but have since learned my lesson. People you don't want to hire can spend 45 minutes on one and not get to an answer.

HR departments are so keyword driven, they don't know what to do with my resume. I'm repeatedly told by recruiters "Well, this company only wants java experience, so you're out because you have other experience on your resume".

I've never run into that but would take it as a good indication that I don't want to work at the company. Broader experience should imply exposure to other ways of doing things some of which translate to faster / more robust / more maintainable code.

Or: "Your C++ experience isn't recent enough"...

You don't need to list what tools (including language choice) you used for specific projects.

There is a class of software engineering jobs where what you're doing is a lot harder than learning tools and APIs. Any of the companies you'd like to work for (and some you wouldn't) care more about that.

Microsoft hired me as an employee to write code in C# which I'd never used before and Amazon did the same for a position with a lot of Java although I didn't mention it on my resume and had encountered the language in one consulting project.

I wouldn't hire an employee who did not have experience in non-garbage collected languages because I suspect cleaning up after yourself comes from a certain attention to detail that's an aptitude rather than a teachable skill although otherwise I don't worry about language use.

Comment Re:you'll never make the real money being an emplo (Score 1) 358

It depends on how you define "real money".

I know a handful of people who retired or could have in their 20s and 30s with their earnings as "employees" which is real enough for me.

Senior technical employees can retain 0.25 - 0.5% of a venture funded company at the time of a liquidity event which is taxed as long term capital gains (currently 15% Federally) which leaves them with about 85% of it in the Seattle area, 80% in Denver/Boulder, and 75% of it in Silicon Valley to enumerate a few hotbeds of tech startup activity.

2B * 0.0025 * .75 = 3.75M * .04 = $150K/year for life

OTOH, if you define "real money" as private jets and celebrity parties there are more opportunities to get there as a founder than working your way into a CEO position at a big enough company.

Comment Test driven development about when tests written (Score 1) 317

I'm not convinced by TDD though, I do it but I've never really needed it in all the years of coding I've been doing. I prefer to write up test harnesses that exercise more of the system in a larger granularity. ie, instead of writing tests that exercise a method, I prefer to exercise a class - and then the test I write can be an example of how to use that class if it involves setting up, configuring it to whatever task you want, and then making it do work.

I also find this helps find more bugs than traditional TDD, eg the time I had a network class that had methods to set ip address and port, but if you set the port first, it would fail (as setting ip would first initialise the entire internal address variables). TDD doesn't find those bugs, and they're the ones I'm more interested in.

Test driven development dictates when you write test cases (before the next increment of product code which can be validated) not what they test or the abstraction level at which they operate. When you're applying the methodology for it's benefits (other than getting you consulting income or giving you a religion to follow) that can be one method, a stack of programs, a class, or whatever point of the spectrum makes the most sense in terms of coverage provided and difficulty reproducing and fixing any bugs that are uncovered.

For reliable non-trivial systems with state (real world examples I've done include replicated NOSQL and block storage appliances using shared nothing clusters) this can take even take the form of a software model describing correct operation, mock environment providing deterministic execution order, and event/timing (including faults) combinations which vary according to a state search strategy and/or pseudo-random approach so you cover situations that you do not anticipate.

As a tangent that sort of testing is uncommon although neglecting to do it leads to huge problems. Google replaced a commercial replicated light weight database because it did not work and mentions the issue in passing in _Paxos made live_. In _MODIST: Transparent model checking of unmodified distributed systems_ Microsoft research applies model checking to three production systems with one running commercially on 100,000 machines and finds protocol errors in all three. I once found a five year old data loss bug in a shipping storage product when I did that and had a new guy fix it in his first week on the job.

The advantage is when you write the test in relation to the product code. Developed up front it's more likely to influence product code encapsulations and APIs to make test easier so you get better coverage and spend less time tracking down root causes. Since testing the code you just wrote doesn't block on writing the test the context switch overhead to fix the bugs you introduce the total cost to fix them is lower.

When misguided managers think "we'll add quality later" and try to cut corners on test development (they often get demoted and replaced after ship dates slip too much, but that can take a long time whilst your life is made unpleasant) it's not possible for them to ship a product prematurely (the product code is not done) and harder for them to damage the release.

As your software becomes more trivial the importance of doing this is less; although such simple work is easier to outsource or delegate to lower paid junior employees so more senior engineers might not have to deal with such situations for too long.

Comment Re:Hell, I'd love to code now (Score 1) 317

tech support! I used to dream of tech support interruptions!

Now I'm doing a bastard child of agile that the company has brought in and I cannot do anything for longer than 2 hours without having to go back to the scrum board for more work. Don't they know they can just point me at a problem and I'll get it solved - it is what I've been doing for several decades after all.

I guess the agile stuff is for the kids who can't concentrate on a task for longer than an hour and have to keep being told what to do or they'll just start looking at facebook and twitter all day.

You need a better job. You may be able to change what's going on there (after a CEO change I got a 2 hour scrum reduced to a brief meeting every-other day with most updates happening electronically via Agilo for trac) to make it tolerable. That may be impossible or exceed your patience in which case you need a different employer.

Agile is awesome especially test driven development.

It's like when you where metaphorically young, made some trivial program not many orders of magnitude more complex than "hello world," ran it, saw everything worked, and were happy except it applies to non-trivial problems like replicated storage that still smells like a single copy of data.

Writing a test, making a change (which can be entirely non-trivial), knowing whether it works within 30 seconds, and being able to iterate until it does over minutes or an afternoon is far more pleasant than making months worth of changes which cursory experiments suggest work, dumping the pile on your QA organization, getting feedback that something's broken, making a change, getting feedback that something else is broken a day or two later, making a change, etc. as the release date slips.

Agile is great for business especially in startup environments where you need to get customers before running out of money and release cycles measured in hours are more conducive to that than ones taking six months.

Burn-down lists and velocity measurement are great for engineering and business. While engineers are good at estimating the size of things they're bad at mapping that to wall clock time in real world environments where tactical (customer support issues) and environmental (your open floorplan is too noisy for people to think 9am - 5pm) issues exist beyond their control. With feeedback on velocity you can come up with more realistic numbers for release dates so there's less stress for everyone involved and a better idea of what you can fit into releases on some periodic schedule so customers don't suffer as the release date and/or quality slip.

Micro-managing and calling it "agile" is bad for both engineers and profits.

Scrum is bad because you loose productivity when you force human context switches for daily meetings. Where you make the meeting early to avoid that engineers stop working exactly eight hours after the meeting start so they're not too tired the next day even though that may mean hours to get back to where they were instead of minutes to finish. If they do stay late to get something done they come to the mandatory meeting tired and the quality of their work is as bad as if they were drunk.

Scrum is even worse when mis-applied. People can and do turn the daily meetings into 1-2 hour affairs totaling 50-100 man-hours a week for a team of 10 people which can be $200 - $500K/year in fully burdened costs when you have senior people in high-wage areas.

Some managers like to use one burn-down list for the entire organization where
engineers are fungible commodities that do whatever is the highest priority regardless of scope and how far along they are in their career. That's a huge waste of money (in large technology companies some one with 15-20 years of experience doing meaty things can have a compensation package twice the size of some one with 1/10th that experience), reduces quality, and robs people of their self-actualization.

Comment Re:Learn one word (Score 1) 479

No. Learn two words instead: Flexibility. Autoreformatting.
Then you can stop worrying so much about the style of the damn code, and get your ideas into the computer without fussing over adhering to your own style.

That sounds intriguing to me.

How do I apply auto-reformating to JIRA, gmail, bugzilla, Coverity, enscript, and the plethora of other tools which get used in the software development process?

Slashdot Top Deals

This file will self-destruct in five minutes.

Working...