dimanche 18 mars 2012

Non-déterministe Problèmes alias trouver des talents

Comme les programmeurs, nous traitons habituellement systèmes déterministes. Pour le dire de façon simpliste, les systèmes déterministes sont des systèmes où les entrées sont toujours les mêmes résultats dans la même sortie. À moins que nous introduire intentionnellement aléatoire ^ 1 ou ont un nombre relativement espèce rare de bug dans notre code, les mêmes entrées à nos programmes donnera toujours la même sortie. Il pourrait très bien être le résultat erroné si notre algorithme est mauvais, mais il devrait être le même résultat à chaque fois mauvais, qui est un trait nous comptons sur beaucoup.

Dans le monde réel, la plupart des choses que nous rencontrons sont non-déterministe. Il ya toujours des facteurs que nous ne pouvons pas contrôler ou mesurer, et la plupart des systèmes ont un élément humain. Nous sommes à la merci des caprices et de l'émotion, et c'est difficile pour beaucoup de programmeurs à traiter. Les choix de nos frères humains sont décidément non-déterministe et difficile à prévoir, comme le sont les nôtres (même si nous le faisons habituellement pas remarqué ce trait tout autant à nous-mêmes).

Vous avez peut être remarqué que je n'ai pas eu beaucoup de temps pour écrire ces derniers temps. J'ai été extrêmement occupés ces derniers temps, même par mes propres normes. Bien que beaucoup de mon temps est consacré à l'écriture et le débogage de logiciels, j'ai aussi été impliqué dans des problèmes très non-déterministe en raison de mon engagement avec certains grands projets de développement complexes.

Probablement le plus grand non-programmation problème que j'ai eu à traiter ces derniers temps, dont la plupart de mes pairs de l'industrie et presque tous nos clients sont traiter aussi, est de trouver une bonne, expérimentés, développeurs de projets fiables pour le personnel. En bref, il n'ya pas assez expérimentés développeurs de logiciels mobiles pour tout le monde. Il n'ya tout simplement pas autant de développeurs avec de multiples projets réussis à son actif comme il ya des entreprises qui ont besoin des services de ces personnes. Je sais que d'une seule grande entreprise qui a actuellement dix réquisitions ouverte pour les développeurs mobiles - cinq iOS et cinq Android - et pas de perspectives viables pour le moment. J'ai aidé un client récemment apporter à bord un bon développeur iOS, qui a duré plusieurs mois, et puis j'ai très vite regretté, parce MartianCraft pourrait vraiment utiliser les services de ce développeur est maintenant.

Pourtant, d'autre part, chaque fois que je blogue sur combien de travail il ya en ce moment, je inévitablement plusieurs e-mails ou des commentaires de développeurs désireux de savoir comment trouver tout ce travail. Je fais sonner comme il pleut travail, et ils ne sont pas mouillés.

Compte tenu de cela, j'ai pensé qu'il vaut quelques minutes pour écrire sur les deux côtés de l'équation: comment trouver des développeurs, et comment trouver du travail en tant que développeur. Ce n'est pas un traitement exhaustif, juste un résumé des observations récentes.

Pour les développeurs: Trouver un emploi



Malheureusement, je n'ai pas de solution miracle pour les développeurs en herbe. Succès durant la nuit est souvent impossible de distinguer années de dur labeur. Il ya des questions autour de l'obtention d'innombrables qui ne sont pas mobiles de développement spécifique que je ne vais pas toucher, comme une volonté de délocaliser ("aller là où le travail est").

Comme dans toute industrie, une grande partie du travail de recherche consiste à établir une réputation et d'apprendre à connaître le plus de gens dans l'industrie que vous le pouvez. Bien que cela coûte cher, vous avez vraiment besoin d'aller à la WWDC, et probablement un autre couple de conférences ainsi. Environ la moitié, voire plus, des travaux MartianCraft est venu directement ou indirectement à la suite d'un d'entre nous assister à une conférence. Les conférences sont là où nous rencontrons nos pairs et où nous développer et maintenir nos relations avec eux. Vous devez aussi assister CocoaHeads and/or NSCoder Nuit si vous en avez un près de chez vous. C'est là que vous pouvez rencontrer et faire connaissance locale iOS et les développeurs Mac. Sur le côté Android, il ya même de répondre-ups que vous pouvez y assister.

Lorsque vous allez à embaucher ou sous-traiter un développeur, la plupart des gens que je connais automatiquement préfère quelqu'un qu'ils ont rencontré, parlé avec, et peut-être partagé un verre avec plus d'un étranger, peu importe la qualité de l'étranger reprendre les regarde. Confiance dans la capacité de quelqu'un à faire un travail vient plus rapidement de l'interaction personnelle. Les curriculum vitae sont stériles, mais de s'asseoir et de travailler par le biais d'un bug difficile avec quelqu'un vous donne une idée réelle de caractère de l'autre personne et les côtelettes techniques d'une manière on ne peut jamais obtenir d'un CV.

Lors des conférences, ne vous inquiétez pas aller à chaque session. Tout le monde essaie de DubDub à leur début, mais n'en ont pas. Vraiment. Ménagez-vous afin que vous puissiez socialiser dans la soirée. Cela peut ressembler à de mauvais conseils, ou même futiles - comme si je vous dis à l'école buissonnière, mais l'information dans les sessions peuvent être retrouvés. La plupart des conférences vidéo de leurs séances, et habituellement certains des participants ne conjointes de prise de notes en utilisant SubEthaEdit et de rendre ces notes disponibles. Mais la socialisation avec les pairs de l'industrie est essentielle si vous voulez faire cela à temps plein, en particulier comme un indépendant. Ce sont les gens qui peuvent te donner du travail (et accepter de travailler quand vous êtes trop occupé pour entreprendre de nouveaux travaux vous-même), et ils sont les gens qui peuvent vous aider lorsque vous êtes coincé sur un problème technique noueux. Ce sont les gens qui peuvent vous donner une perspective différente sur quelque chose que vous avez été à regarder trop longtemps et sont les gens qui peuvent vous aider à devenir un développeur plus intelligents, mieux c'est.

Bien que n'étant pas parfait, la communauté iOS et développeur de Mac est incroyablement donnant et serviable. Il n'est pas rare pour les concurrents directs pour aider les uns les autres et considérer chaque autres amis. La plupart d'entre nous réalisent que ce n'est pas un jeu à somme nulle, et en aidant les autres dans notre communauté vient habituellement avec intérêts. Scratch cela. Généralement non. Toujours.

Obtenir des travaux en cours exige plus que d'être aimé par d'autres développeurs, cependant. Vous devez donner aux gens une raison d'avoir confiance dans vos capacités. Création ou contribuant aux projets open source peut montrer énorme (si elle n'est pas immédiate) retourne. Dans les premiers jours de l'IOS, avant que les données étaient disponibles, mon projet m'a apporté la reconnaissance SQLitePersistentObjects presque autant que d'avoir mon nom sur la couverture des livres de programmation iPhone.

Blogging régulier est également une énorme opportunité. Non seulement elle donne aux gens une idée de la profondeur de vos connaissances, il vous donne une chance d'apprendre et de s'améliorer. Je ne pense pas que j'ai posté plus de messages couple un blog technique où il n'y avait pas non plus une correction ou une amélioration m'a été envoyé par un lecteur, et souvent il y en avait beaucoup. Rappelez-vous juste de ne pas être sur la défensive ou déprimé quand il arrive. Vous n'arrêtez pas de faire des erreurs jusqu'à ce que vous cessez de vivre, mais si vous continuer à apprendre, vous pouvez éviter de faire la même erreur trop nombreuses fois. Les lecteurs qui s'intéressent suffisamment au point vos erreurs sont précieux delà de la croyance. Apprivoisez votre ego et de les chérir. Personne ne va penser moins à vous en tant que développeur pour des erreurs occasionnelles ou moins-que-parfait du code.

Mais, peu importe combien de ce qui précède que vous faites, il ya un préalable absolu à obtenir du travail sur une base continue: vous devez avoir les côtelettes technique. C'est probablement la chose la plus difficile à comprendre. J'ai rencontré de nombreux développeurs qui n'avaient pas grande confiance en leurs capacités et j'ai rencontré certains qui ont eu beaucoup trop de confiance en eux. Il est vraiment difficile à évaluer votre propre capacité et il est presque toujours triste de revoir ancien code que vous avez écrit. Peu importe la qualité que vous obtenez, il ya toujours place pour aller mieux et si vous le faites bien, vous le ferez. En tant que développeurs, nous sommes payés tant pour notre capacité à assimiler rapidement de nouvelles connaissances que nous sommes pour les choses que nous savons déjà.

Ne vous inquiétez pas trop à votre si vous avez un diplôme spécifique, ou un diplôme d'études collégiales à tous. Vous n'avez pas à avoir une informatique ou diplôme d'ingénieur informatique pour être un bon programmeur. Il ya beaucoup, beaucoup de programmeurs grande (y compris à l'intérieur d'Apple) sans ces degrés et, en fait, sans diplôme du tout. Collège est une façon d'obtenir les renseignements et certains de l'expérience dont vous avez besoin pour être un bon programmeur, mais ce n'est pas la seule façon, et il est possible (mais probablement pas commun) pour passer à travers l'école avec un diplôme CS ou CE et complètement aspirer . Certains des programmeurs pire iOS j'ai rencontrés ont tous deux degrés et une expérience de programmation. Objective-C est un peu une bête bizarre, et l'excès de confiance est un gros problème pour les développeurs expérimentés venant de C + +, Java et C # de fond. Ils regardent l'Objective-C, voir les aspects familiers, et pensent qu'ils savent ce qu'ils font, parfois complètement inconscients de la différence entre une statique, langage fortement typé et une dynamique, un faiblement typé ou les différences entre une poubelle recueillies langue et une référence compté un.

Dans un monde parfait, personne ne serait jamais en mesure d'offrir leurs services en tant que développeur iOS, sans comprendre parfaitement les règles autour de la gestion de la mémoire. Je ne suggère pas que vous devriez, mais tout le reste, vous pourriez apprendre sur le tas, mais vous devez vraiment Grok la façon de conserver le comptage et la gestion de la mémoire de travail à un développeur professionnel iOS. Vous pouvez vraiment fuck up une base de code essayer de corriger les bugs EXC_BAD_ACCESS si vous ne savez pas ce que vous faites et peuvent créer énormément de travail pour quelqu'un d'autre dans le processus. Vous pouvez aussi sortir avec énormément de fuites si vous développez sur le simulateur qui va causer des problèmes importants plus tard. Les enjeux deviennent beaucoup plus élevé lorsque vous travaillez sur le même code dans le même temps d'autres développeurs sont.

Une chose à envisager sérieusement, même si vous avez un peu d'applications sous votre ceinture, est de prendre une classe ou d'atelier. Il y en a d'excellents là-bas, y compris (mais certainement pas limité à) la Big Nerd Ranch et le Studio pragmatique. A quelques milliers de dollars peut sembler beaucoup d'argent, mais c'est un enfer d'un investissement donné des opportunités de travail disponibles dès maintenant. Un bon atelier battra dans votre tête les choses importantes. Ils vous attacher un firehose des informations sur votre visage et ouvrir le bec. Ils feront de votre cerveau blessé, mais vous sortirez sachant gestion de la mémoire et les fondamentaux, et qui vous mettra dans la course.

Une autre compétence clé est de débogage. Etre capable de fixer des bugs et ceux que vous trouverez dans le code des autres est essentiel. De plus, les bugs que vous rencontrez plus, plus les choses que vous ne savez pas le faire à l'avenir. Voulez-vous tester? Essayez le téléchargement de ce. C'est un projet Xcode - une version modifiée de l'un des projets de développement iPhone Début 3 - qui a un certain nombre de bugs communs introduit. Vous devriez être capable d'obtenir ce pour compiler propre (pas d'erreurs ou d'avertissements), puis être capable de naviguer dans tous les afficher dans l'application sans le faire tomber et avec quelque chose qui est affiché sur chaque vue. Une fois que vous avez fait cela, vous devriez alors être en mesure de réparer toute fuite dans l'application en utilisant des instruments. Combien de temps cela prend va dépendre de beaucoup de facteurs, mais je dirais que typique, expérimenté, développeur professionnel iOS devrait être en mesure de résoudre ce problème entre un demi-heure et une heure et demie. Peu importe le temps qu'il faut, si vous pouvez les corriger tous, sans aide, vous avez parcouru un long chemin sur la voie de devenir un développeur grande.

Ne vous inquiétez pas si vous ne pouvez pas les trouver tout ce que rapidement. La première fois que vous rencontrez une classe particulière de bug, il prend plus de temps. La persistance est aussi importante que la vitesse, et le débogage de ce projet est un bon exercice. Une fois que vous voyez un type de bogue une fois, c'est beaucoup plus facile de trouver et de le réparer quand vous le rencontrez à nouveau.

Si je trouve le temps pendant les vacances, je pourrais faire un screencast montrant comment trouver et de corriger tous les bugs dans le projet. Je ne peux pas promettre que je trouve le temps de le faire compte tenu de ma charge de travail actuelle, mais si je peux, je le ferai.

Enfin, si vous cherchez à temps plein ou un emploi iOS Android, ou pour un travail de développement des contrats, envoyez-moi votre CV. MartianCraft n'est pas l'embauche à temps plein pour le moment, mais nous ne sous-marins ont souvent besoin, et je sais de beaucoup, beaucoup ouvert pour les réquisitions emplois à temps plein et je suis toujours heureux de transmettre reprend le long des gestionnaires d'embauche.

Pour les entreprises: trouver des développeurs mobiles



L'autre côté de l'équation est, comment voulez-vous un projet personnel de développement mobile en ce moment? Beaucoup de développeurs mobiles expérimentés ont été attirés par l'espace, car il leur a offert la possibilité de faire une vie en créant ce qu'ils veulent créer. Mobiles, et surtout des opportunités de développement pour iOS offrent de petites équipes, sans beaucoup de fonds pour mener une vie décente. Beaucoup de ces développeurs indépendants font exactement ce qu'ils veulent faire et ça va être difficile, voire impossible, pour les attirer loin de cette vie, si elles sont bonnes dans ce qu'ils font.

L'enfer, les développeurs ont des idées de nombreux contrats app qu'ils aimeraient travailler sur eux-mêmes. Un de mes amis qui possède un magasin de développement pose le problème de façon assez succincte récemment en disant: «. Nous avons des idées de plusieurs app nous aimerions construire, mais les clients conserver jeter de l'argent chez nous"

Je ne sais pas exactement combien de contrat de développeurs iOS il ya en Objective-C expérience qui date d'avant la sortie de l'iPhone SDK et / ou qui ont plusieurs projets réussis à son actif, mais c'est moins que nécessaire. Les grandes entreprises sont enfin sur la capture de l'importance de la téléphonie mobile et cela fait un bassin de talents peu profonde, même profonds. La situation est similaire pour Android. Bien qu'il n'y ait plus de gens qui connaissent déjà la langue sous-jacente (Java), la plateforme a que relativement récemment frappé la masse critique, donc il n'y a pas beaucoup de personnes qui ont été impliqués avec succès les projets de logiciels Android encore comparé à l'œuvre disponible, et encore moins qui ont été expédiés avec succès plusieurs projets d'Android.

En toute réalité, vous êtes soit vont avoir besoin d'offrir des tarifs fous pour attirer la crème de la récolte à votre projet (et qui n'est pas une garantie que vous allez obtenir de la crème) ou vous allez avoir besoin d'investir du temps et d'argent dans le développement des talents internes. Je conseillerais à moins d'avoir un vraiment bon, conduire expérimentés tech sur tout projet de taille décente, cependant. Comme beaucoup d'histoires de succès App Store peut en témoigner, il est absolument possible d'expédier un bon logiciel en utilisant uniquement les développeurs inexpérimentés. Mais, ce faisant augmente votre risque considérablement. Ayant au moins un mentor qui peuvent guider et aider et résoudre les problèmes vraiment dégueulasses est d'or.

Dans la plupart des endroits, vous pouvez former les développeurs à moindre coût et plus rapidement que vous pouvez trouver ceux qui existent déjà, du moins si vous êtes à la recherche d'employés à temps plein. Ce n'est pas un plan parfait - votre peuple nouvellement formés seront d'apprentissage sur le tas et de faire des erreurs et peut, à certains moments, a frappé les problèmes qui sont au-delà de leur entendement. Mais, avec la formation adéquate et un soutien, ils peuvent gérer le gros du travail, et au fil du temps, va acquérir l'expérience pour gérer quoi que ce soit. Bien sûr, vous aurez à prendre des mesures pour les empêcher de partir. Armement d'un employé possédant une compétence très commercialisables encourt toujours un risque de perdre cet employé.

Vous pouvez traiter que l'utilisation de termes du contrat nécessitant récupération des dépenses de formation ou d'autres idées similaires, mais il est beaucoup plus efficace (quoique difficile) pour créer un environnement où les gens veulent travailler. La satisfaction au travail est un grand motivateur pour de nombreux développeurs que la taille de leur chèque de paie, en supposant qu'ils font assez pour être confortable et se sentir valorisés. Nous sommes l'un des secteurs de croissance rares dans cette économie, et il ya toujours un autre chèque de paie, quelque part, si vous avez ces compétences, donc si vous êtes créer un environnement hostile, aucune somme d'argent va à garder les gens bien autour de long terme.

Il ya une autre option, vous songez peut-être: la délocalisation. Allez-y. Je veux dire, ce que je dis contre la pratique va sembler biaisé étant donné ce que je fais pour vivre, et c'est vrai que vous pouvez obtenir des taux considérablement plus bas en le faisant. J'ai vu des magasins dans d'autres pays offrant des services de développement pour iOS sur ce que vous pouvez faire travailler au Burger King ici dans les états. Et il ya effectivement des histoires de réussite des délocalisations vers les ateliers de carrosserie bon développement. Malheureusement, il ya des histoires d'horreur encore plus. Dans les rares cas où j'ai été amené à fixer ^ 2 projets de cette nature, il a toujours été un gaspillage de temps et nous avons fini par tout jeter l'ancien code et en recommençant. Laissez-moi vous dire, «repartir à zéro» est une suggestion qui fait peur dans le cœur des chefs de projet.

Pour le dire plus justement possible: La délocalisation risque augmente. Si vous êtes à l'aise avec davantage de risques, alors il pourrait être un bon choix pour vous. Il ya une chance que vous viendrez en chemin sous le budget et être un héros. Juste reconnaître qu'il ya une grande chance que vous finirez dans six mois la ligne de départ plus complètement. N'importe quelle manière vous le coupez, vous êtes susceptibles d'avoir des barrières linguistiques, les différences culturelles, et un moment difficile l'application de la responsabilité. Le simple fait de la question est, même dans les pays avec un coût considérablement plus bas de la vie, les possibilités de bonne développeurs mobiles sont légion, la seule façon de ces commerces peuvent maintenir ces taux excessivement bas est avec un flux constant de nouvelles, des organes inexpérimentés. Appelez-moi fou, mais il me semble, que si vous allez avoir des organes inexpérimentés travailler sur votre projet, vous seriez mieux avec d'autres plus proches de chez eux que vous pouvez former et de guider et d'avoir une idée de ce qu'ils faites.

Je vais être franc. Si vous cherchez à construire une équipe de développeurs iOS ou Android en interne, vous avez une route difficile qui vous attend pour le moment. À un certain point, nous allons frapper l'équilibre et ce sera plus facile, mais maintenant, c'est dur. Tout comme je l'ai suggéré aux développeurs en herbe, je vous encourage à s'impliquer dans la communauté. Envoyez quelqu'un, de préférence quelqu'un avec une certaine autorité d'embaucher des développeurs, et dont au jour le jour d'emploi est de travailler avec la technologie, à des conférences, CocoaHeads réunions, et Nuits NSCoder, Ou l'équivalent Android (Meetup.com est un bon endroit pour trouver à la fois iOS et Android dans des groupes de votre région).

Je suis toujours heureux de entendre entreprises qui ont besoin d'iOS ou Android ressources de développement. Je suis ravi de voir les employés potentiels votre chemin si vous cherchez des talents en interne, et MartianCraft est toujours ouverte aux parler avec des vous de vos besoins de développement, que ce soit pour un conseil peu et des orientations stratégiques, ou à tout le personnel un projet de développement. Et si MartianCraft n'est pas un bon ajustement pour votre situation ou n'a pas les ressources disponibles pour faire un excellent travail, il ya une bonne chance que nous connaissons quelqu'un qui est et fait. Si nous le faisons, nous vous mettrons en contact avec eux.



1 Techniquement parlant, sans apport extérieur de quelque sorte, les ordinateurs ne sont pas capables de hasard vrai, et en utilisant une fonction pseudo-aléatoire ne fait pas un ordinateur non-déterministe. Pseudorandomness ne rendre l'ordinateur semblant d'être non-déterministe, cependant, et vous apparaîtra pour obtenir une sortie différente de la même entrée sur les pistes successives du programme.
2 Le terme que nous professionnels de l'industrie utilisent pour désigner ce processus est "unfucking". Étonnamment, la plupart des dictionnaires ne sont pas ramassés ce terme encore.

Aucun commentaire: