Mlodszy programista PHP - jakie minimum?

0

Po sesjach chcę zaleźć sobie pierwszą robotę. Najlepiej ogarniam PHP i w tym też chcę zacząć. Poza tym dłubie w Pythonie, ale minie jeszcze trochę czasu zanim ogarnę dobrze Django i będę w tym swobodnie pisał. A chciałbym już zacząć cokolwiek robić, bo na razie kiszę się w domu i powoli rozwijam :)

Pytanie, co trzeba koniecznie umieć na stanowisko - młodszy programista PHP/webdeveloper do jakiejś sensowej firmy, która ma osobny dział dla back-endu itp. Nie chcę ciąć stronek w Photoshopie i kodować ich w HTMLu...

Co już umiem:

  • podstawy HTML/CSS
  • PHP
  • podstawy MySQL - co trzeba na potrzeby niedużych portali to umiem, ale nie znam się na wydajności baz danych, optymalizacji itp.
  • ogarniam OOP i MVC

Czego się akurat uczę:

  • CodeIgniter
  • JavaScript/jQuery

Konkretniej to:

  • machnę prosty szablon na HTML5/CSS w miarę zgodny ze standardami
  • rozumiem/potrafię przeczytać skrypty PHPowe i MySQLowe (te prostsze)

Co zrobiłem

  • blogowy CMS - zintegrowany z MySQL, z funkcją logowania (jako admin), dodawania, edytowania postów, kategoriami itp
  • poza tym jakieś proste skrypty, np shoutbox itp.

Teraz tworzę:

  • CMS'a opartego na CodeIgniter bardziej rozbudowanego i z fajniejszą funkcjonalnością niż ten w czystym PHP, będę chciał też wprowadzić możliwość wyboru kilku różnych templatek i realnego wpływu na wygląd strony poprzez klikanie z panelu admina

Do pracy od 1 lipca się będę wybierał, więc mam jeszcze prawie dwa miechy. Pytanie czego by się trzeba jeszcze douczyć itp? Czy w ogóle takie stanowisko młodszego programisty PHP jest w moim zasięgu?

6

Tu masz minimum, które każdy programista powinien znać:

Coding

Write a function to reverse a string.
Write function to compute Nth fibonacci number.
Print out the grade-school multiplication table up to 12x12.
Write a function that sums up integers from a text file, one int per line.
Write function to print the odd numbers from 1 to 99.
Find the largest int value in an int array.
Format an RGB value (three 1-byte numbers) as a 6-digit hexadecimal string.

Good candidates for the coding problem are verifiably simple, with basic loops or recursion and perhaps a little formatted output or file I/O. All we want to know is whether they really do know how to program or not. Steve's article predates it, but I'd be remiss if I didn't mention Why Can't Programmers.. Program? here. The FizzBuzz problem is quite similar, and it's shocking how often interviewees can't do it. It's a bit hard to comprehend, like a potential truck driver somehow not being able to find the gas pedal or shift gears.

Object-Oriented Programming

Design a deck of cards that can be used for different card game applications.
Model the Animal kingdom as a class system, for use in a Virtual Zoo program.
Create a class design to represent a filesystem.
Design an OO representation to model HTML.

We're not saying anything about the pros and cons of OO design here, nor are we asking for a comprehensive, low-level OO design. These questions are here to determine whether candidates are familiar with the basic principles of OO, and more importantly, whether the candidate can produce a reasonable-sounding OO solution. We're looking for understanding of the basic principles, as described in the Monopoly Interview.

Scripting and Regular Expressions

Last year my team had to remove all the phone numbers from 50,000 Amazon web page templates, since many of the numbers were no longer in service, and we also wanted to route all customer contacts through a single page.

Let's say you're on my team, and we have to identify the pages having probable U.S. phone numbers in them. To simplify the problem slightly, assume we have 50,000 HTML files in a Unix directory tree, under a directory called "/website". We have 2 days to get a list of file paths to the editorial staff. You need to give me a list of the .html files in this directory tree that appear to contain phone numbers in the following two formats: (xxx) xxx-xxxx and xxx-xxx-xxxx.

How would you solve this problem? Keep in mind our team is on a short (2-day) timeline.

This is an interesting one. Steve says 25% to 35% of all software development engineer candidates cannot solve this problem at all-- even with lots of hints and given the entire interview hour. What we're looking for is a general reluctance to reinvent the wheel, and some familiarity with scripting languages and regular expressions. To me, this question indicates whether a developer will spend days doing programming work that he or she could have neatly avoided with, perhaps, a quick web search and some existing code that's already out there.

Data Structures

What are some really common data structures, e.g. in java.util?
When would you use a linked list vs. a vector?
Can you implement a Map with a tree? What about with a list?
How do you print out the nodes of a tree in level-order (i.e. first level, then 2nd level, then 3rd level, etc.)
What's the worst-case insertion performance of a hashtable? Of a binary tree?
What are some options for implementing a priority queue?

A candidate should be able to demonstrate a basic understanding of the most common data structures. More specifically, the big ones like arrays, vectors, linked lists, hashtables, trees, and graphs. They should also know the fundamentals of "big-O" algorithmic complexity: constant, logarithmic, linear, polynomial, exponential, and factorial. If they can't, that's a huge warning flag.

Bits and Bytes

Tell me how to test whether the high-order bit is set in a byte.
Write a function to count all the bits in an int value; e.g. the function with the signature int countBits(int x)
Describe a function that takes an int value, and returns true if the bit pattern of that int value is the same if you reverse it (i.e. it's a palindrome); i.e. boolean isPalindrome(int x)

As Steve says, "Computers don't have ten fingers, they have one. So people need to know this stuff." You shouldn't be treated to an uncomfortable silence after asking a candidate what 2^16 is; it's a special number. They should know it. Similarly, they should know the fundamentals of AND, OR, NOT and XOR-- and how a bitwise AND differs from a logical AND. You might even ask about signed vs. unsigned, and why bit-shifting operations might be important. They should be able to explain why the old programmer's joke, "why do programmers think Oct 31 and Dec 25 are the same day?" is funny.

http://blog.codinghorror.com/getting-the-interview-phone-screen-right/

0

Polecam Yii Framework, jest prosty,bardziej na czasie i powinien Ci sie spodobac.

0

@Coldpeer Już kilka osób mi Yii polecało, więc chyba spróbuję.

Pytanie do osób z branży (każdy kiedyś zaczynał ;p).
Czym się zajmuje taki stażysta/młodszy programista PHP? Jakie ma na początku (przez pierwszy miesiąc/dwa obowiązki)? Czego się można spodziewać na początku? Potem wiadomo, jak się zaaklimatyzuję w firmie to się samo wyklaruje, ale na początek wolałbym wiedzieć czego się można spodziewać.

Jakie były Wasze pierwsze zadania w pierwszej pracy w webdeveloperce?

1

Jeżeli firma jest w miarę sensowna, to pewnie przyjmą kilku stażystów, dadzą do zrobienia jakiś projekt wewnętrzny na 2-3 miesiące żeby was przetestować. Wyznaczą osoby odpowiedzialne za pomaganie wam. Będzie całkiem luźno, bo i tak wszyscy będą skupieni na swoich projektach, a wam pozostanie robić to co dla was zaplanowano i rozwijać się. Później przyjmą 'najlepszych' i tyle.

Młodszy programista pracuje już przy komercyjnym projekcie, robi trochę prostsze zadania, często ma swojego 'mentora' który powinien mu pomagać. Co do konkretnych zadań to ciężko powiedzieć, wszystko zależy od projektu ale raczej nie będzie to nic szczególnie skomplikowanego.

Co do frameworków, polecam uczyć się czegoś nowego: Symfony 2, Laravel. Bardzo popularny jest też Zend(wersja 2 jeszcze w miarę ujdzie, za to jedynka to tragedia ;)). Im starszy framework, tym bardziej narażasz się na to, że projekt ma już sporo lat i jakość kodu może być na prawdę słaba. Ostatecznie wybór należy do Ciebie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1