Good Coding Skills Are Not Enough

zhaozj2021-02-16  57

Good Coding Skills Are Not Enough

But I Just Wanna Be a Programmer! Why Do I NEED ALL OF THESE NON-CODING SKILLS? Can't i Just Sit in My Cubicle and connection onprogramming?

Sure you can. In fact, the overwhelming majority of programmers worldwide do just that. Of course, the overwhelming majority of programmers worldwide also have an extremely common set of complaints about their jobs. The simple reality of the matter is that your job is probably not anywhere near as good as it could be, and neither is your software. We've already identified a large number of culprits that appear to be responsible for the problems we encounter, but, when it all comes down to the bottom line, it's Your fault. Ouch. CAN I SAY THAT? Well, Perhaps, IF Only Because I'm Safe for the Moment from the Sting of A Whiteboard Eraser.

How can all of the shortcomings in your software development shop - so many of which are typically caused by managerial decisions that exhibit about as much common sense as a lima bean -?. Be your fault Simple If you sit on your hands and do ...................... ..

If I'm suggesting that you take a more active role in dealing with the issues you face as developers, I suppose it's not that different from asking you to storm a machine gun nest. Of course, all those years of dealing with maintenance programmers has Undoubtedly Prepared You Better for Such A Task. Still, To Be Practical About IT, Anyone Taking Risks Should Have A Reason, What's in it for you?

What's IN it for me?

Probably one of the biggest hassles in any fulltime programmer's career is sacrificing your life to countless hours of unproductive - and very often unpaid-- overtime It's bad enough that you're given a situation where you can not get the job done working. forty hours a week. The way most businesses are run, the end result may well be yet another release disaster even if you put in eighty hours a week. That's not exactly a rewarding experience, particularly if you have to give up your life for it WHEN We're Reaching for Is The Next Killer App. We are artists as much as anything else. To put blood, sweat, and tears into a project (okay, maybe not the former if you don 't have to interact with the maintenance programmer) only to have management ship it in a half-baked state can be downright infuriating, and that's with a full night of sleep. I have no desire to work day and night as it is. Doing SO ON A Project Destined for Failure Adds Insult To Injury.along Tho se lines, one of the things that are in it for you as an artist is the ability to ship a betterquality product. Whether your name is in the About box or not, your signature is on every piece of software you ship. We all tend to take a great deal of pride in our accomplishments, so who wants to be associated with anything other than a spectacular success? Do I work for money or for ego? Both. (in that order, for the record, but definitely both.) IF you want to be involved in projects this make you proud, you have to do your part to help the salesurvive in the wild.

Actually, I've always had a pretty bad attitude towards companies that take advantage of programmers and expect them to dedicate their every waking minute to the job. Maybe it's because I've been a musician all my life and have seen how nightclubs and other aspects of the music industry tend to pay almost nothing. They get away with this because they know we love music so much that we'd probably play for free and are usually happy to take whatever we can get. A low-paying gig on the weekend is more fun than no gig. Because of this, bar gigs pay today almost exactly what they paid twenty years ago. Really. It's an unfair and predatory practice but is so common that it's become the norm accepted. If you push for more equitable pay, you're simply told that they're not doing anything different than every other venue in town. that's typically true, but it does not make it right.Many software development companies employ this exact approach in dealing with programmers, and for The Exact Same reasons. We got into this business because we were passionate about programming. We tend to do it at home in the evenings and on weekends just for fun. With the same predatory attitude, these sweatshops take advantage of our love for development and make continual overtime An Accepted Norm.

I have a friend who is a programmer working in such an environment. In fairness, I must say that he was told up front in the interview that, due to the stock options giving the employees a sense of ownership in the company, they hired only those people who were willing to dedicate above-average hours to the job. Nonetheless, he's been killing himself the past few weeks working late hours. I made some of the usual jokes with him regarding end-of-the-project crunch time and asked .. when the release date was His answer floored me, even though it's nothing new He said there was no deadline;. it was simply a corporate culture If you were not putting in all the extra hours, you just were not working hard ENOUGH.WHEN a AN Honest-to-Goodness Crisis, You Can Count On Me Each Time, Every Time. I'll Be The Guy With The Sleeping Bag Next To My Desk. Obviously, My Friend SEES IT AS Worthwhile, And He'S A Pretty Sharp Guy for Whom I Have A Lot of Respect. However, this Sort of Open-ended Abuse O F Program Welln't touch with a ten-foot pole.

Consequently, for years now I have employed a somewhat unorthodox tactic for avoiding sweatshops. I live in a major city, and there always seems to be plenty of work out there for my particular skill set. Consequently, when I go out for interviews, I do so with the desire of landing a job that I really want. By the time I actually get down to the normal face-to-face interaction with the company, we've already done a lot of the dance and it's a foregone conclusion that I'm potentially a good fit. They would not bother to interview me otherwise. So, we go through all the normal motions where we each do our best to convince the other that we're something that life is just not complete without. When it's just about all said and done and things look good, I ask about the kind of hours that they're working on average and if overtime is a frequent flyer in their world. I've found that a good many managers do not Want to beh Honest with you About this Because The Figure is would Be Harden To Get people to sign on. They're certainly correct. So, just to make sure that I'm not being suckered into a sweatshop environment, after they've assured me that they do not work much overtime I happily agree with the philosophy, telling them that I have enough going on in my life that I like to get my job done in forty hours a week. I then tell them that as a seasoned developer it's my personal conviction that, if you're unwilling to pull the occasional all -nighter at crunch time, you should get out of the business. However, I feel that any company that has a crisis every week and that requires constant overtime is a company with extremely stupid management, and I have no desire to work for such morons .

The truth is that, if the conversation has indicated to me that I'm not the only programmer in the room who curses like a sailor, I use much stronger language than "extremely stupid" because I really want to make a point. Having done so, one of two things usually results. Either they were telling me the truth in the first place about little overtime, in which case we've agreed on yet another topic, or they're lying to me. If the latter, I have just terminally insulted them and there is no way in heaven or earth that they will hire me. Which is exactly my intent. When times are tough, you take whatever gig you have to in order to survive. However, under normal circumstances, there's plenty of work in our business, and life's too short to work for abusive companies.Does all of that sound patently unprofessional to you? Perhaps it is. Nonetheless, ask me how many sweatshops I've worked in. Now, I spend my nights and Weekends Living My Life While Others Toil Away Hour After Hour, Pushing T Hemselves Closer and Closer to Burnout. I'm A Decent Programmer, But Many Folks in This Business Are Much, Much Better Than I. and YET, I GET PAID AS WELL AS THE NEXT Guy and I Work Forty-Hour Weeks. Why? Because I realize what, to have a gratifying career, good coding skills aren't enough.

The ability to consistently meet your deadlines is indeed another benefit that we can gain by looking beyond our technical abilities. Above and beyond the obvious fact that, if you're hitting your goals in a well organized fashion, you're not killing yourself with pointless overtime. Being successful and productive tends to lower your stress level and makes you less likely to be harassed by management. We get up each morning and spend a very significant portion of our days working for a living. If that experience is unpleasant, then simple math tells us that a very significant portion of our lives is unpleasant. Who wants to live like that? of course, if you regain control of your programming life, you can spend more time coding and less time putting out fires. I realize that , technically speaking, coding is coding, but that does not mean that I enjoy it all equally. My personal preference is to sit undisturbed writing new code on a project that sparks my interest and enthusiasm. I can a ssure you, I've spent many, many hours coding in scenarios that were nowhere near my preference. So have you. I could have gone to school and learned to do a great many things for a living. I became a programmer because it was A way to pay. if I'm not happy fun, i feelly, i care a great deal there M11, And Soul. That's Good for Me, That's Good for The Project, And That's Good for The Company. I believe strongly in win-wins.

Naturally, one of the things we want to do is work on the cool projects instead of the stuff nobody wants to touch. Who cares if you're using the programming language and environment of your choice if the task you've been given is dull , tedious, and probably destined to never see a real, live user anyway? The cool projects, as you have no doubt observed, tend to go to the people who make an effective effort to get them. That sexy new project has to go to someone. Why not you? I once worked a contract with a friend doing development on a data entry product that had an extremely complex list of input validations that were different for each state in the country and for each new customer's needs. The approach that they were taking when we got there was to create a new dynamic link library for each customer / state modification. This struck us as a little cumbersome. We then found that their method of doing this was copying the entire source code base for one library, pasting IT to a New Dire ctory, going into the code and manually changing anything that needed alteration. Above and beyond the volumes of duplicate code, they even approached the positioning of images by changing magic numbers in the call to display the image, compiling, viewing the image, taking a Guess at how much it needed to move, and reporting the process.

My friend, being a serious veteran programmer, observed the obvious that what this really called for was a custom screen editor and code generator, coupled with common code libraries. Of course, we could have solved this problem in other ways that did not require a code generator, but in talking to the other developers we encountered massive resistance to the idea. They felt that, if there was not a lot of code floating around, their job security might be threatened. We both take a dim view of such poor ethics but were realistic enough to know that we were swimming upstream in trying to fight it.We approached the project manager, who was himself a programmer and a good guy. He was newly arrived to this project and not responsible for the mess of his predecessor. He enthusiastically embraced our idea and told us to get to it. In the end, while the rest of the team slogged away copying and pasting code (my friend also observed that .cpp clearly stood for Copy-and-Paste Programming), WE WER .

When it was complete, work that took several programmers three months to accomplish was done in a week or two by a single developer. After we had moved on to new contracts, we heard that the project manager was promoted. When a new manager came in , the developers got together, scrapped the system we built, and returned to the old ways of copy-and-paste programming. Who cares? We did not. I've long since spent that money. It's my responsibility to conduct myself in an ethical fashion and do quality work; what the company does with it is its own affair The point is that, although everyone else was working on dull, boring, and tedious tasks, my friend and I were having a blast kicking out a cool. App And Earning The High Regard of The Project Manager. Why? Because We Both pursued talents beyond the technical.

The Last Reason I List in Terms of What's in it for you is no doubt one of the max import. The Ability to make better Money Has a lot to do with non-work for money, don't you? I suppose I could have pursued different avenues of programming that might make me a buck or two more, but I like what I do. that's a big deal, and without it I think I'd just go back to playing guitar in smoky bars. Life's too short to spend it doing something you hate, no matter how much it pays. Nonetheless, I've been broke many times in my life (many of which had a curious relationship to the amount of time I spent playing in smoky bars) , And i don't care for the experience. Money Ain't A Bad Thing, And, IF You Want Me To Write Code for you, Money Is Required. How much? Every Last Penny That I Can Negotiate, of Course. The Goal is not just to do what we love for a living, but to get paid extremely well in the process. To accomplish Both, You're going to need more tour you ical prowess. If you can code in technical utopia and also have enough money to keep yourself stocked up on the latest bleeding-edge gadgets, is not that worth a little extra effort? Who Needs These Skills?

How do these various skills fit into the structure of the development team? You may be thinking that much of what we've discussed thus far is of limited use to a production coder and applies more to those who pursue a management career path. Actually, it's never really that simple. I've never met a programmer whose job could be neatly packaged into one tidy little category. In the real world, throughout the course of the project we end up wearing different hats at different times, even if the job description when we signed on was supposed to be nothing but a coder.Whether your part of the project is large or small, the same requirements apply if you're to successfully deliver your software. Chances are good that you have some additional responsibilities beyond making sure that your code compiles without warnings and does not cause smoke to pour out the back of the box. (It's true, though, that I once came back to my desk in the middle of a debugging session to find a fire extinguisher i n front of my keyboard. I can assure you that there were no hardware problems. Honest.) If that's the case, you're going to need skills beyond the technical. However, even if you're fortunate enough to do absolutely nothing but code week after week, you still have other responsibilities. At a minimum, for your project manager to be successful in shielding you from the insanities of the corporate world, he's going to need your support.

You're also going to be involved in meetings. If you never go to meetings, drop me an email and let me know who the human resources person is at your company. In any event, you're going to find that you spend much of your work-week doing things that do not require compiling, debugging, or uttering the occasional programmer's expletive.The size of your team may shift the types of skills you need, but whether it's large or small you've got to be able to cope with the business world in one manner or another. Small teams with a lot of individual autonomy require individuals with good organizational and navigational skills. If you're working in an environment where you're given a task and are then left alone to make it happen, you actually end up doing a lot of project management whether you realize it or not. (you can think of it as just being organized and focused in your work if the "project manager" part makes you twitch.) Whatever you Call it, howare, you have mail... You still need to be able to define your requirements clearly, perform adequate design, and arrive at an achievable timeline with milestones arranged along the way, just to name a few. Your compiler will not help you with any of this.

When working on larger projects with multiple teams, you'll often encounter as much corporate fumbling from within your team as you do from without. You will likely have a dedicated project manager and perhaps a structure of technical leads as well, along with a hefty complement of programmers. Political considerations will be much more a factor in this environment, as will issues such as how well meetings are run, the competency of your project manager in partitioning tasks, how much interference you get from middle and upper management, and many Other Things We've Touch on Things Far. Remember, You're At the Bottom of The Software Development Food Chain. Very Little Happens Higher Up You, One Way OR Another.

You may also find yourself working in the capacity of technical lead from time to time. Although it's a testament to the confidence that others have in your technical and organizational skills, this can be a thankless job with great potential for burnout. A technical lead is often nothing more than a project manager with limited scope who carries a full coding load. In other words, not only do you get to do all the work you normally do as a developer, much of it technical and therefore enjoyable, you also get to handle the managerial tasks that are relevant to your team. If it sounds like you just inherited a considerable amount of overtime, you're probably not far from the truth. The trick to working this position with any degree of success, which includes avoiding burnout , is to realize that you can not be a manager at any level, not even the team lead, and get a full day's worth of coding in. Depending on how large your team is and how much organizational work you'll have to perform , you should take your normal level of coding assignments and knock off a quarter or perhaps even half. Unfortunately, technical leads are not always given the power to make such decisions, which is why it's often a real burnout inducer.

Of course, if you have a one-programmer project (and that happens a lot in the business world), you're the project manager, team lead, and coder all rolled into one. If you thought that technical leads had a workload, you'll just love this one. Of course, there are some significant benefits to being a one-programmer team. With no other team members to distract you or call you into endless meetings, you might actually get some coding done. However, never forget that there are always going to be managers above you. What they're called is irrelevant. Any way you shake it, they're managers and that involves all the normal issues of politics, bureaucracy, their effectiveness in dealing with their own management , and all the rest. Additionally, just because you're the only programmer does not mean that it's wise to short-circuit the requirements gathering, design, or estimation phases. The rules do not change based on the size of the project Although Experience Tells US That, if you're a one- programmer team, the chances are good you work in one of those places where they expect to see code flying off your fingertips nonstop. Trying to get a process in place is even harder when you're the only one there.Taking Control of Your Time

To be successful - and, even more importantly, to be recognized as such by those you work for - you have to get the job done This sounds too obvious to mention, but sometimes it's easy to overlook the obvious It's important to.. keep in mind that business people pay you because they want you to produce something. If you really want to be good at your job, there's more to delivering the goods than coding. you have to keep in mind the end goal of the system you ' re developing and what it's supposed to accomplish, and do everything within your power and the scope of your position to see it through to completion. You may or may not be recognized for your extra efforts. You may not even want to be recognized, for a variety of reasons. Nonetheless, your ultimate reward will be in delivering quality software, on time and within budget, without overtime, without stress, and without any other nonsense you can avoid. Make this happen, and you put yourself in a better position For The next Project T hat comes up. Everyone loves a winner.At every level of development, one of the constants is the need for effective time management if you wish to meet your deadlines. Approaching software development in a scattered and disorganized manner is going to significantly diminish your results and increase the amount of time it takes you to get them. Along with that comes a higher level of stress as you've never really quite got a handle on what's going on. This tends to leave you feeling rather breathless and with the nagging suspicion That You're Always Running BEHIND. It's probably a correct assessment.

I once knew a project manager that actually oversaw several development efforts. This person always seemed to have several balls in the air at any time. His office looked like a whirlwind of file folders, stacks of paper, and various boxes of uninstalled software, and there were probably a couple of chew toys from his dog in there somewhere as well. He constantly had a harried look about him as if he were somewhere on the border between not being able to cope with it all and the sheer terror that someone else was going to come yell at him. All of his projects were behind, and he spent half his time dealing with customers who were upset about it. This, of course, did not help free up any time for him to solve the problems.In short, this was one of the most disorganized managers I've seen. Little wonder that his projects were a mess. In fact, what thread of cohesion that actually did run through his various teams was the result of the personal initiative of his developers, Who wisely SAW that they would get no support from their manager and consequently took matters into their own hands whenever possible. The interesting thing about this guy is that, not only was he overbooked as it was, he never hesitated to take on a new project whenever he could get his hands on one. Could he have handled this kind of workload efficiently? Probably not in fortyhour weeks, but it did not have to be the disaster that it was. It all comes down to organization. He did not know how to keep his own ducks in a row, had no skills at planning or running a meeting, and interacted with his developers only in a crisis-driven mode, dashing out in a panic to tell them of the latest fire that they had to work late to Put Out.

With better time management skills, he could have taken control of the various projects, avoided being yanked from one crisis to the next, and perhaps even have delegated a little. Such things would have settled his projects down tremendously. What's that you say? It's Not Your Problem Because you don't want to be a project manager? You're Just a Programmer? Well, WHO Do you think he had working for him? if Your Manager is a mess, And Many of Them Are, You're Going to need all the skills you can get purely for self-defense.enhancing design

System design is another area in which it's handy to have some facility in something other than compilers. It is certainly not a given that a good coder is naturally a good software designer as well. Although obviously related, they are two completely separate disciplines. However , you do not have to know how to code to work in an architectural capacity, and you do not have to have design skills to write source code. However, you do need to have a grip on the design side of things before you start writing that source code. If you just shoot from the hip and do not think your way through things on a small scale the same as you would for larger tasks, you're likely to encounter difficulties either halfway through what you're coding or the first time someone else has to interface to your code. We typically think of design in terms of mapping out the entire software system, but, when you get down to it, you should always think before you code. Even if management is inclined To believe That Yo U'Re Daydreaming Rather Than Working.

One of the many reasons you need some facility with design is that, to meet your deadlines, you're going to have to have some skills in estimating as well. It's true that an estimate is of little importance if you're given the date before you're given the assignment, but sometimes you'll have a manager who asks you how long a task will take and actually pays attention to what you say. If you can not cook up a good estimate, you're not only setting yourself up for failure, you're doing it to your manager as well. I've found that in general it's a bad thing to make the person who is responsible for your paychecks look stupid to their own boss. People are funny that way .Improving interaction

One of the significant benefits to possessing more than merely technical skills comes when you learn to improve your interaction with others. Sometimes it's courtesy, sometimes it's being able to deliver the goods, and sometimes it's just plain old politics, but it's always a beneficial thing that comes back to you. When you come in to the office each morning, you do not deal with a highly specialized class of sentient office furniture. you deal with people. Okay, I did once know someone who spent an inordinate amount of time talking to his furniture but I gave him the benefit of the doubt and chalked it off to sleep deprivation. If you keep in mind that you're dealing with real, live, flesh-and-blood people instead of nameless, faceless coworkers, you 're going to have a much better time of it in the business world. The better your people skills, the better your chances of getting what you want, whether it's a new computer, a new project, or more money. If you can also Learn to Be Bilin .

For those of us who take our programming seriously, sometimes just the ability to bring better software to life is reward enough. Interpersonal skills help tremendously in this area as well. If you have great new ideas on how your software should be designed or how a particular chunk should be coded, you still have to be able to sell it to others if you want to make it a reality. Proposing new ideas successfully requires more than flowcharts and whiteboards. Decisions are often made not because the facts overwhelmingly pointed to a particular solution but rather due to the charisma of the individual making the presentation, whether it was a formal meeting or just a persuasive conversation in the hallway. Do not feel as if you're really overflowing with charisma? you'd be surprised how much Of this can be an acquired skill. weehe't All Born Movie Stars. s you need to gain the respect and admiration of your peers and management. Many programmers feel that they'll never have much luck in the persuasion department because they were not born natural orators. However, if you learn to speak the language of your audience, understand the things that motivate them, and position yourself appropriately, you'll be surprised how often you win We'll be going into these things in more detail later, but I'll touch once more on a recurring theme here.: You can't win if you don't try.

Probably the bane of programmers and cubicle dwellers everywhere is the dreaded meeting. Some weeks it feels as if all you've done is travel from one meeting to the next. Sometimes it's true. Ironically enough, many of those meetings will be rants from higherups who wonder why the heck we're so far behind on our schedule. you're probably not in charge of most of the meetings you attend and therefore have to suffer through someone else's poor skills at organizing and running such gatherings. There's only so much you can do in that scenario, but you can help expedite the process at least a little. Further, if you decide to get serious about your skills in meetings, others will notice and a small groundswell may result. A meeting run by an inept manager can be put back on track, shortened, and made more productive when just a few of the attendees understand some of the basics and are assertive enough to help the process along. If you're actually responsible for reducing the number or dura Tion of Meetings At Your Company, You'll Probably Become A FOLK HERO AMONG YOURS. (WHO KNOWS? The May Even Name A Conference Room in Your Honor.) getting what you want

Something that's not really as obvious as it seems is knowing what you want out of life. The truth is that a very large number of people in this world just do not know exactly what they want. Just as it's impossible to meet all the expectations when developing a piece of software with poor or fuzzy requirements, so too is it true in life. That includes your career. If you do not know very specifically what you want, you'll have difficulty achieving it and probably would not recognize IT if you did.

My observations have led me to believe that a large majority of programmers got into this business much as I did: I started programming for fun, got hooked, and decided that it would be a cool way to make a living I then went out and. got a job. What exactly was I looking for in a programming career? in retrospect, I had absolutely no idea. I just wanted to get paid to write code.Having put a number of miles behind me by now, I have a much better idea of ​​what I want for two reasons. First, I've had enough experience to see what's out there, what I like, and what I passionately wish to avoid. Secondly, and I think even more importantly, is the fact that at one point I sat up and realized I was working with fuzzy requirements and decided to do something about it. I actually spent time and gave serious, detailed thought to just exactly what I wanted in my programming career. I then set out to accomplish it.

Naturally, IT'S MUCH Easier To Get What You Want When You Know What IT I. And i Have Had A Very Enjoyable Career Thus far. I've sprent time doing the type................... This is not because I'm any kind of superstar, one-in-a-million programmer. It's simply because I detailed my goals and desires and then set out to accomplish them in exactly the same way that I would approach turning a requirements document into a good design and ultimately an implemented product. That involves little more than taking one step at a time, always with an eye to the future. Of course, from time to time, I revisit my desires and tweak the spec where necessary, as what I want tends to change. I also spend a fair amount of time reviewing where I am, where I've been, and how things are going so far in my efforts to meet these goals. That helps me to make the necessary course corrections .Many of us Tend to spend our lives on automatic pilot to one degree or noother. I'm sure if you took a little time to yourself and gave it some thought, you could come up with a pretty decent list of things you'd like to change about your current job and perhaps your career or life in general. That's a step I'd encourage you to take. Be specific. Be very specific. What you're defining is the perfect world. Do not leave anything out, even if you think it unlikely to accomplish. Once you've done this, you 'Ll Have a decent Requirements Document from Which To Work.

The next step is to come up with a decent design doc. Take a look at where you are in your career and start brainstorming, just as you would in a design meeting, about how you might get there. Unlike as in software design, in this exercise it's acceptable to leave some questions unanswered. you may not see the solution at the moment, but new input or opportunities could come out of the clear blue sky at any point in the future to help you chart a course for that particular goal. Keep it on the requirements list. For all the other items, you'll end up with at least a beginning strategy and plan of action. Although this does not agree with all of the true software design methodologies, in the real world design tends to get tweaked as we go, benefiting from what we learn and steering around problems as we encounter them. So too will your design doc that you create for your programming career be modified as time goes on. I've heard it said that no battle Plan Survives Contact with the Enemy . Allow for that flexibility.Once you've got a good design (which in any business is simply a detailed road map for how to get where you wish to be), it's time to give some attention to implementation. You now know, in great detail, exactly what the perfect programmer's life is, at least for you. you have a strategy in place to make this a reality. The next logical step is to start taking the necessary steps to realize your desires.

转载请注明原文地址:https://www.9cbs.com/read-27815.html

New Post(0)