Programavimo karjera

  • Self-taught programmers are more likely to feel the nagging fear that their skills are incomplete or illegitimate. They worry that there are things they should know but have never name-checked with a Google search. They worry about other languages and hard-core computing theory. A surprising number worry about pronunciation, thinking that saying coder jargon the wrong way will expose them as an impostor.

Standup meetings

  • I eventually came to like standup meetings, but with one caveat: no management (including project management) is allowed to attend. Otherwise it becomes a status meeting rather than a "How can we get past our current blockers" meeting. Management glazes over all the technical talk -- the very thing that we need to speak about if we are to need a meeting at all. What a standup is good for is casually checking with your teammates that the approach you are taking is reasonable and to discuss other strategies. It's useful for asking for help, swapping pairs (or getting one in the first place). If you find yourself doing the "This is what I did yesterday. This is what I'm going to do today" dance, then you are not getting much value. It should be blindingly obvious what you did yesterday, because code was written, reviewed and hopefully merged. Possibly you may want to say, "Hey, can you review my code?" It should be blindingly obvious what you are going to do today, because you grabbed a card/task from the backlog. The only thing you need to talk about is, "I'm confused. How do I do this?" and the like.

Maker's schedule, manager's schedule

One reason programmers dislike meetings so much is that they're on a different type of schedule from other people. Meetings cost them more.

There are two types of schedule, which I'll call the manager's schedule and the maker's schedule. The manager's schedule is for bosses. It's embodied in the traditional appointment book, with each day cut into one hour intervals. You can block off several hours for a single task if you need to, but by default you change what you're doing every hour.

When you use time that way, it's merely a practical problem to meet with someone. Find an open slot in your schedule, book them, and you're done.

Most powerful people are on the manager's schedule. It's the schedule of command. But there's another way of using time that's common among people who make things, like programmers and writers. They generally prefer to use time in units of half a day at least. You can't write or program well in units of an hour. That's barely enough time to get started.

When you're operating on the maker's schedule, meetings are a disaster. A single meeting can blow a whole afternoon, by breaking it into two pieces each too small to do anything hard in. Plus you have to remember to go to the meeting. That's no problem for someone on the manager's schedule. There's always something coming on the next hour; the only question is what. But when someone on the maker's schedule has a meeting, they have to think about it.

For someone on the maker's schedule, having a meeting is like throwing an exception. It doesn't merely cause you to switch from one task to another; it changes the mode in which you work.

I find one meeting can sometimes affect a whole day. A meeting commonly blows at least half a day, by breaking up a morning or afternoon. But in addition there's sometimes a cascading effect. If I know the afternoon is going to be broken up, I'm slightly less likely to start something ambitious in the morning. I know this may sound oversensitive, but if you're a maker, think of your own case. Don't your spirits rise at the thought of having an entire day free to work, with no appointments at all? Well, that means your spirits are correspondingly depressed when you don't. And ambitious projects are by definition close to the limits of your capacity. A small decrease in morale is enough to kill them off.

Each type of schedule works fine by itself. Problems arise when they meet. Since most powerful people operate on the manager's schedule, they're in a position to make everyone resonate at their frequency if they want to. But the smarter ones restrain themselves, if they know that some of the people working for them need long chunks of time to work in.

http://www.paulgraham.com/makersschedule.html

Atsakas į klausimą: Ar norint tureti programuotojo karjerą užtenka kolegijos?

Q: Sveiki, siuo metu as mokausi antrus metus universitete anglijoj, taciau kuo toliau tuo daugiau mane nuvilia sios studijos. Turbut daugiau nei puse atsiskaitymu sudaro 1-2 tukstanciu zodziu rasiniai remiantis ivairiais moksliniais darbais susijusiais su nagrinejama tema. Kitus atsiskaitymus, kurie reikalauja ka nors paciam sukurti arba optimizuoti, as sugebejau padaryti per savaitgali. Nemanau, kad viso pusmesio darbo ivertinimas turetu uztrukti tik pora dienu. Taip pat puse (kartais nes daugiau) praleisto laiko paskaitose sudaro teorija.

As pasirinkau studijuoti uzsienyje vien su ta mintimi, kad as baiges studijas norejau likti gyventi uzsienyje, taciau cia pagyvenes supratau, kad vis del as noreciau grizti i lietuva ir karejos siekti cia. Todel as svarstau nebesvaisysti cia pinigu ir nebelisti i dar giliasnias skolas ir tieiosg mesti studijas cia ir grizus i lietuva gauti issilavinima kolegijoje. Mano tevai tam gerokai priestarauja, kadangi mano, kad as baiges kolegija galesiu geriausiu atveju dirbti lietuvje. Kadangi as vistiek manau sieksiu karjeros lietuvoje, jei kolegijos uztenka gauti darba, manau didelio skritumo nebus.

Taigi, ko as noreciau paklausi - ar siekiant programuotojo kajeros lietuvoje uztenka issilavinimo kolegijoje ir ar tai man pasunkintu gauti pirmaji darba. Ir jeigu kadanors as vel pakeisciau nuomone ir noreciau dirbti uzsienyje, ar turint kolegijos issilavinima ir poros metu praktika lietuvoje man pakistu koja gaunant programuotojo darba uzsienyje.

Labai dejoku kas duotumet per kokiu patarimu arba pasidalintumete asmenine patirtimi.

A: Jeigu kolegijoje mokysiesi tik tiek, jog tik atsiskaityti tam kartui, tik palei programą - pabaigęs realiai nebūsi pasiruošęs darbui ir įsidarbinti programuotoju geriausiu atveju galėsi nebent ant fux'o radęs kompaniją, kuri noriai priima žalius ir yra pasiruošę juos apsimokyti. Tai čia tikėtina būtų kokia nedidelė firmukė, pvz kepanti svetaines ant Wordpress'o. Šitas variantas reiškia, jog gausi ne baisiai už minimumą didesnę algą arba jog teks išties rimtai pradėti mokytis.

Jeigu domėsiesi, darbuosiesi, mokysies ir programuosi papildomai, laisvu laiku, tai tokiu atveju kolegijos net ir nelabai ir reikia, jei tik sugebi išlaikyti discipliną ir be jos. Darbdaviams nelabai rūpės, net jei ir būtum baigęs puikiai žinomą universitetą. Jiems reikia žmonių, kurie supranta ką daro ir moka spręsti iškilusias problemas greitai ir kokybiškai. Per darbo pokalbius žiūrima su kokiomis technologijomis dirbi, kiek praktikos su jomis turi ir kiek gerai iš tiesų supranti apie tai, ką prisirašęs į CV.

Užsienyje įsidarbinti problemų nebus, jei iš tiesų būsi kažkurios srities specialistas. Turiu omenyje ne įrašą ant popieriaus, o realius sugebėjimus. Jeigu mokėsi suadministruoti tinklus, kurti backend sistemas, karpyti dizainus ant JS framework'ų, programuoti apps'us ir pan, priklausomai nuo to, kurią kryptį būsi pasirinkęs.

Q: Mokytis stengiuosi tikrai daugiau negu tik palei programa ir daznai laisvalaikiu programuoju. Man svarbiausia suzinot ar as nepadaryciau klaidos atsisakes universiteto diplomo ir vietoj to baiges kolegija. Ar gali buti tokiu atveju, kad manes darbdavys net nepakviestu darbo pokalbiui vien del to, kad turiu kolegijos diploma ir ar tai nesutrugdytu gauti aukstesnios pozicijos darbo po keletos metu praktikos, ar man visada teks paprastesni darbai?

A: Jeigu nepatinka studijos, nesijaučia jog jos tau būtų naudingos, kad tobulėji, tai tada tikrai verta būtų pagalvoti apie jų nutraukimą. Manau tokioj situacijoj reikėtų žiūrėti ne iš tos pusės, kad 'na bet gaila sugaišto laiko', o iš tos pusės, jog sutaupysi ir nebešvaistysi dar papildomų kelių metų. Ko gero pas tave yra tas tėvų įkaltas įsivaizdavimas, koks yra svarbus diplomas. Ir taip, jei norėtum ten kokiu advokatu ar gydytoju būti, tai be jo niekaip. Tuo tarpu programavime? Viskas šitoje srityje susiveda į skills'us. Mūsų tėvai augo amžiuje, kuriame diplomas reiškė stabilumą, patogią, vidutinę darbo vietą. Dabar toli gražu ne taip ir nieko tas diplomas negarantuoja išvis. Didelė dalis dirbančiųjų, net ir nedirba pagal savo įgytą specialybę. Mano kolegos programuotojai varijuoja nuo buvusių barmenų ar filologų iki vadybos ar istorijos studentų. Programavimo patirtis, kaip ko gero žinai, skirstoma į junior, middle, senior, teamlead. Ir gali būti kad ir kokį Harward'ą pabaigęs ar išvis be diplomo būti, visvien nepriklausomai to, dirbti visgi pradėsi nuo junior pozicijos iš kurios pakilsi per 2-3 metus. Nieko aš prieš jį neturiu, nemaišys aišku jeigu jį visgi nuspręstum gauti. Studijuojant visvien išmoksi dalykų, nuo disciplinos, deadline'ų laikymosi, koloboracijos iki mokėjimo atrinkti, konspektuotis informaciją kas yra labai naudingi įgūdžiai. Pasirinkai universitetą, tad nieko nuostabaus, kad didžioji dalis laiko skiriama teorijai ir rašto darbams. Toks univerų principas mokymo ir yra. Na bet anyway akademinėje aplinkoje įprastai daugiau dėmesio skiriama algoritmų struktūroms, optimizavimui, saugumui ir t.t. ką žinoti tikrai naudinga, tačiau tas gerąsias praktiškas gali išmokti ir savarankiškai su laiku. Tiesiog sakau, kad turi įsivertinti ar gauni iš studijų pakankamai. Jei sakai jog ne, neturi jokio drive'o ir dabar tiesiog kankiniesi vien tam, kad vėliau geresnį darbą atsirakinti galėtum, tai tada nesikankink. Žiūrint iš finansų pusės, tai protingiausia ko gero būtų pabandyti susirasti darbą jau dabar, bet toje pačioje Anglijoje. Jeigu visgi gyventi ten tikrai nebenori, tai turėk omenyje, kad grįžus savo pirmuosius porą metų dirbsi už ~800€. Čia gali pasižiūrėti realią Lietuvoje esančios programuotojų rinkos situaciją: https://docs.google....qVD0#slide=id.p Taipogi Lietuvoje studijų kokybė tikrai nedžiugina ir finale ko gero liksi nusivylęs taipogi. Po dabartinių studijų univere tikriausiai atrodys, jog LT kolegijoje yra tiesiog per lengva, nuobodu, tad nemanau, kad tau net ir ji būtų reikalinga. Su sąlyga, žinoma, kad jau dabar kažką moki, na bet sakai programuoji. Tai GitHub'o linkas su keliais tavo projektėliais įdėtas į CV atrakins daugiau darbo pokalbių, jei jie bus geri, nei bet kuris diplomas. Na kolegijos pliusas bent tas, jog ten tikrai daug daugiau fokuso į praktiką, bei taipogi pamatysi jog turi nemažai laisvo laiko, tad galėsi ir studijuoti ir dirbti. Toks variantas galbūt tau būtų optimaliausias, nes rezultate turėsi ir oficialų savo žinių patvirtinimą "dėl tėvų" ir dvasios ramybės, jei jau taip reikia, tiek ir realios darbinės patirties, kuri ir bus tavo raktas į geresnius darbus. Na tik žinoma turėsi atlaikyti gan smarkų tėvų spaudimą.

  • “What is your previous salary?” is employer-speak for “Please give me reasons to pay you less money.”

  • Peter Drucker came up with the terms Profit Center and Cost Center. Profit Centers are the part of an organization that bring in the bacon: partners at law firms, sales at enterprise software companies, “masters of the universe” on Wall Street, etc etc. Cost Centers are, well, everybody else. Engineers in particular are usually very highly paid Cost Centers. This is what brings us wonderful ideas like outsourcing. Nobody ever outsources Profit Centers. You really want to be attached to Profit Centers because it will bring you higher wages, more respect, and greater opportunities for everything of value to you. If you want to work there, work for that. If you can’t, either a) work elsewhere or b) engineer your transfer after joining the company.

  • Producing beautiful software is not a goal. Solving complex technical problems is not a goal. Writing bug-free code is not a goal. Using sexy programming languages is not a goal. Remember you’re selling the solution to a business need - raise revenue or decrease costs, rather than programming skill or your beautiful face. Those are your only goals. Don't call yourself a programmer, instead describe yourself by what you have accomplished for previously employers vis-a-vis increasing revenues or reducing costs. If you have not had the opportunity to do this yet, describe things which suggest you have the ability to increase revenue or reduce costs, or ideas to do so. The dominant quality which gets you jobs is the ability to give people the perception that you will create value. This is not necessarily coextensive with ability to create value.

  • People who are skilled in negotiation make more than those who are not. Negotiate aggressively with appropriate confidence, like the ethical professional you are.

  • You radically overestimate the average skill of the competition because of the crowd you hang around with.

  • Most jobs are never available publicly, just like most worthwhile candidates are not available publicly. Information about the position travels at approximately the speed of beer, sometimes lubricated by email.

  • There are other benefits like “free soda”, “catered lunches”, “free programming books”, etc. These are social signals more than anything else. When I say that I’m going to buy you soda, that says a specific thing about how I run my workplace, who I expect to work for me, and how I expect to treat them. (It says “I like to move the behavior of unsophisticated young engineers by making this job seem fun by buying 20 cent cans of soda, saving myself tens of thousands in compensation while simultaneously encouraging them to ruin their health.”