Mar 18 2012

Așa mă trec și eu…

Category: Miscellaneous,TechnicalIuliana @ 23:06

   Când eram la începutul carierei mele de developer, mai exact când terminasem facultatea tot ce îmi doream era să găsesc o firmă care să mă angajeze și să mă muncească ca pe un sclav, forțându-mă să îmi folosesc creierul la maxim pentru a acumula informație și a învăța cum să o folosesc astfel încât să cresc în domeniu. Îmi doream să scriu mult cod, să scriu atât de mult cod încât să și visez cod. Nu știu dacă am găsit exact ce căutam, am avut colegi care au evoluat profesional mai repede decât mine, deci ori creierul meu nu duce, ori firma ce m-a găsit, nu m-a muncit destul. Oricare ar fi motivele, acum când mă apropii de șase ani de experiență în development, deși îmi place la nebunie să scriu cod, asta nu mai este așa de important.

Mi se par mult mai interesanți pașii de dezvoltare ai unui proiect, alcătuirea unei echipe, estimări, arhitectură și alte nebunii care la început mi se păreau a fi pierdere de timp. Poate îmbătrânesc, poate experiența își spune cuvântul, chiar nu știu care este motivul pentru care mi-am schimbat punctul de vedere. Nu mă înțelegeți greșit, încă îmi face plăcere să scriu cod, doar că acum codul scris de mine știu ce rol joacă în proiect și știu cum să îl dezvolt ținând cont de imaginea de ansamblu a proiectului.

Și na, acum că văd lucrurile altfel în proiectele IT mă amuză oarecum obsesia unor juniori de a scrie cod, dar adevărul este că până nu ajungi la un anumit nivel tehnic nu poți înțelege imaginea de ansamblu a unui proiect. Și cât de mult lucrezi la prima firmă unde te angajezi contează cel mai mult. De exemplu, guru-ul pe java la compania la care lucrez acum a lucrat încă din al doilea an de facultate la o firma unde programul era de 8-14 ore pe zi, șase zile pe săptămână. Da, am scris bine, 6 zile pe săptămână. E adevărat că n-a mai terminat facultatea, dar între noi fie vorba, la ce i-ar fi folosit? La ce mi-au folosit mie 5 ani de facultate + 1 an de master? Acum îi sunt  un fel de subalternă (este posibil să scriu prostii – nu știu dacă ierarhia e chiar așa) și asta pentru pentru că în loc să învăț să folosesc tehnologii care chiar se cer pe piață, în loc să rezolv probleme reale  eu am ales să învăț să implementez soluții vechi pentru probleme și mai vechi și în loc să muncesc pentru un salariu am învățat pentru o medie și o amărâtă de bursă.

Dacă ar fi să mă pot întoarce în timp aș spune părinților mei să nu mă mai bată la cap să fac o facultate doar pentru a le îndeplini lor un vis pe care nu l-au putut îndeplini pentru ei înșiși. Le-aș spune să îmi spună că pot să îmi fac un rost în viață fără facultate, dacă asta vreau cu adevărat. E bine să îți îndemni copilul să învețe, dar într-un sistem de învățământ putred și depășit, mai bine îi dai voie să facă ce-i place, îl  îndemni și îl susții să facă din asta o obsesie, are mai multe șanse așa.

Tags:


Jan 29 2012

Javascript… you so funny :)

Category: English posts,TechnicalIuliana @ 11:34

Via GlobalNerdy I have found this video that I wanted to share. So just click here and watch it. You will not be sorry. I laughed at first too, but then I realized that the weird behavior must have a logical explanation that I don’t know, mostly because I don’t program in Javascript unless I am forced to. The explanation can be found here.
Enjoy!

Tags:


Jan 26 2012

Java stuff that you should know:What are the differences between C++ and Java?

Category: English posts,Miscellaneous,TechnicalIuliana @ 16:48

Java vs. C++ Because somebody brought up this subject here I decided that this is the question I should answer next. I am a developer from the old generation,at least this is how we call it here in Romania. Turbo Pascal was my first, (red cheeks :D) then I learned C, C++, Php, Java and .Net. With Java and C++ I have had the longest and most stable relationships. So I think I am able to answer this one, though I have to mention that nowadays you could be asked to compare Java to other languages too.

Again this can considered to be a difficult question mostly because there are a lot of differences between these two languages. That’s why you want to start your answer with the differences that remove any doubt that you know both languages pretty well, and usually this means getting technical. This is the how I would answer this question:

  • Java is multi-threaded, C++ is not
  • In Java primitive and reference data types are always passed by value, C++ uses also references and pointers.
  • Java has no pointers, C++ does
  • Java has implicit memory management through garbage collector, in C++ memory management is explicit
  • Java does not allow operator overloading,  C++ does
  • Java does not need destructors, C++ does
  • Java does not have type struct and union, C++ does
  • In Java, types cannot be overridden, in C++ we can do that.
  • Java does not provide multiple inheritance using classes (or virtual inheritance), C++ does
  • In Java, arrays have fixed sizes and attempt to read from an index bigger that size -1, will cause an exception. In C++ attempt to read from an index bigger that size-1 might even succeed and the value returned is the current value stored int that memory block.
  • Java programming model is totally compatible with OOP programming. C++ also supports functional programming, procedural and template programming.
  • Java is a WORA/WORE – write once run anywhere/everywhere (any compatible JRE ) , C++ is a WOCA – write once compile anywhere
  • Java has built-in support for comment documentation
  • Java has no native support for unsigned arithmetic, C++ does. (Has anybody used that in C++, ever?)
  • In Java there is no need for scope resolution operator (::)

Of course there’s more, but this should be enough at an interview. Fell free to add anything you might consider important. As always I am eager to learn new stuff.

Tags: ,


Jan 26 2012

Când tehnologia se comportă imprevizibil

Category: TechnicalIuliana @ 0:50

Acum ceva vreme mă plângeam că laptopul meu Lenovo m-a dezamăgit. A murit placa de rețea pe UTP din senin, deși laptopul nu a fost bruscat, chiar m-am purtat foarte grijuliu cu el. Din câte am înțeles de la Rpx, placa mea de rețea la laptopul ăsta este practic integrată în procesor, deci era inexplicabil cum o bucată din procesor încetase să mai funcționeze. Repet, nu l-am bruscat, nu s-a întâmplat nimic special, doar într-o seară când am vrut să schimb de pe wireless pe cablu nu am mai avut pe ce. Placa dispăruse din sistem cu desăvârșire. Am încercat să mă uit prin Device Manager. Nu era și pace.  Am intrat în bios, poate din vreo greșeală a sfântului dus și-o fi dat disable. Căutam motive absurde pentru o problemă reală. Nimic.

La un moment dat mi-am dat comandă de o placă de rețea cu adaptor pentru USB și am rezolvat povestea, că nah … wirelesul nu e ca prin cablu. O săptămână am folosit-o pe aia. Apoi a trebuit să schimbăm locația serverului și modemului în casă și cu ocazia asta am și refăcut rețeaua. Pentru că fetele de jos se plângeau că le merge prost internetul, am fost vreo două zile pe la ele cu laptopul meu să fac niște teste de rețea. Am fost nevoită să dau la un moment dat disable la placa wireless, ca sa fiu sigură că se făcea conexiunea prin placa externă.

Când s-a încheiat toată nebunia, m-am așezat la calculator și am vrut să dau enable la placa wireless din Device Manager. Mă uit în lista de network devices, era unul în plus, pe care nu îl văzusem niciodată. Știam că era ilogic și imposibil și absurd, dar i-am dat enable și am băgat cablul de rețea în placa internă a laptopului. A mers și-a luat ip și un videoclip rămas înghețat pe youtube din cauza lipsei de rețea a pornit instant. Deci, placa mea de rețea de la laptop a înviat. De la sine. Așa cum a și murit. În afară de drumurile și testele de la fete, ieri și-a făcut Windowsul meu un update, iar Cezar crede că este posibil un alt update de-al Windowsului să fi bușit driverul pentru placa de rețea. Care a fost cu adevărat motivul pentru care placa mea de rețea a dispărut ca un măgar în ceață nu voi ști prea curând.

Eu ce să fac acuma? Plănuiam să îl dau la garanție, să dau o diferență de bani, să îmi iau altul. Ce mă fac dacă moare din nou, pentru că este știut, problemele care dispar de la sine, reapar de la sine… Dar nah… doar n-o să las sindromul drobului de sare să mă afecteze! Am să mă bucur de laptopul meu care acum este în continuare în stare perfectă de funcționare și gata.

Iar ceea ce s-a întâmplat aseară m-a pus și pe gânduri, dacă tehnologia creată de mâna omului, după niște specificații bine stabilite este atât de imprevizibilă, ce așteptări să avem de la oameni?

Tags:


Jan 19 2012

knowledgeblackbelt.com sau cum să îți dezamăgești comunitatea

Category: Miscellaneous,TechnicalIuliana @ 18:07

Acum ceva vreme, când eram “pe bench” cum se spune aici, pentru a nu mi se rugini și atrofia cunoștințele pe java petreceam ore întregi pe knowledgeblackbelt.com. Ce făceam? Analizam întrebări beta, comentam și la un moment dat după ce am trecut toate examenele care nu necesitau contribution points m-am apucat de adăugat întrebări pentru a primi contribution points pentru că fără ele nu poți da examene, deci nu poți obtine acele centurici virtuale care  spun cât ești de bazat.
Boon, a trecut vremea, m-au pus ăștia la munca, în timpul liber aveam altele de făcut și nu am mai intrat pe site ceva vreme. Până acum câteva zile, când am intrat și am avut un șoc. L-au transformat de mă rătăcesc în el. Și asta n-ar fi o problemă. Problema majoră e că se mișca al naibilor de greu, unele dintre linkuri sau butoane nu merg și multe alte asemenea. Am încercat să mă conving că pot trece peste asta de dragul conținutului, dar când mi s-a spus că nu pot adăuga întrebări pentru ca nu am levelul necesar și mi s-a cerut să dau un click într-un modal afișat incomplet ca să mă ducă pe o pagină unde să mi se spună ce level am și să mi se explice cum să îl cresc, iar linkul ducea la profilul meu, unde nU ERA SCRIS LEVELUL MEU … am clacat. Și mi-am băgat picoarele.

Rest in peace blackbeltfactory(da l-au și redenumit), I will not be visiting anymore! Ever! (Și am o bănuială că nu sunt singura)

Tags: ,


Jan 19 2012

Java stuff that you should know: difference between abstract classes and interfaces

Category: English posts,Miscellaneous,TechnicalIuliana @ 17:14

Many times after a Java Interview I have asked myself if my answers were correct, if the person interviewing me realized that I understand a certain concept and if I was able to express my knowledge in order to achieve that. So I will start writing on my blog how I would answer some common Java Interview questions.

So, in Java what are the differences between an abstract class and an interface?
This is a question with one big answer, not only because there are that many differences between abstract classes and interfaces, but because there are so many ways to say it. So, here is what I would say about interfaces:

  1. Interfaces are equivalent to protocols. They basically represent an agreed-upon behavior (a contract) to facilitate interaction between unrelated objects.
  2. Interfaces are a capsule for a group of methods with empty bodies or prototypes (abstract methods ) and implicitly final static members (constants).
  3. Interfaces have all members public impilicitly.
  4. Interfaces are declared like this:
    public interface TestIntf {}
  5. Interfaces can only extend other interfaces and keyword implements does not apply to them.
  6. Interfaces can extend more interfaces.
  7. If an interface has no direct superinterfaces, then the interface implicitly declares a public abstract member method m with signature s, return type r, and throws clause t corresponding to each public instance method m with signature s, return type r, and throws clause t declared in Object, unless a method with the same signature, same return type, and a compatible throws clause is explicitly declared by the interface.
  8. Interfaces are considered to be slower because they require extra indirection to find the corresponding method in the class implementing them.
  9. Interfaces support only public and default access modifiers.
  10. Interfaces can be declared abstract, so the Java compiler would not complain if your declaration would look like below, but the abstract modifier is redundant as interfaces are implicitly abstract.
    public abstract interface TestIntf {}

Here is what I would say about abstract classes:

  1. Abstract Classes are the middle ground between interfaces and classes. They can have both abstract and non-abstract methods and constant and non-constant fields.
  2. Abstract Classes can have constructor, but it can never be called directly. It can only be called using super in the extending class or is automatically called by the jvm.
  3. Abstract Classes support all access modifiers.
  4. Abstract classes can be declared like this:
    [access_modifier] abstract class TestAC {  [ implementation]    }
  5. Abstract Classes can implement any number of interfaces, can extend only one class (which can be abstract or not – the condition is not to be final) and implicitly extend class Object.
  6. Abstract Classes can have only non-abstract methods (but what would be the point?). Abstract Classes which have only abstract methods and constant fields are called fully abstract.

And what would I say about both of them:

  1. Java supports multiple inheritance only through interfaces.(Some say it is limited. I say it is practical.) Why? Because extending multiple classes may lead to problems when they have methods with identical signatures. (Remember C?)
  2. The use of interfaces or abstract classes is determined by the project requirements and design.
  3. Using abstract classes affects the flexibility of your code, because class extension rips away class individuality.

If you have anything else to add, or something here needs correction, your effort will be kindly appreciated.

Tags: , ,


Jan 17 2012

Remember Insertion sort?

Category: English posts,TechnicalIuliana @ 16:03

I do. :) Enjoy!