Tuesday, 9 August 2011

Що необхідно знати для того щоб стати Intermediate Software Developer.

Доброго дня всім.

Сьогодні я б хотів поговирити про карєрне зростання і підхід до нього в моїй компанії. Отож компанія досить велика і можливості зростання теж досить хороші, для цього навіть налагоджена відповідна система і якщо ви хочете перейти на наступну позицію по карєрній мапі то ви можете ознайомитись з усіма необхідними вимогами, підготуватись і назначити дату для провірки вашої відповіднсті даній позиції. В моєму випадку наступною для мене позицією є Intermid Software Devoloper. Окрім загальних знань по технологіям з якими я працюю також необхідно як мінімум одна презентація, знання англійської на рівні Intermediate low і як мінімум 2 роки досвіду.

Що до знань яких вимагає дана позиція я напишу трохи пізінше а на даний час давайте розглянемо інші деталі. З досвідом все зрозуміло і чесно кажучи досить серйозно, дуже рідко можна піднятись по карєрній мапі немаючи відповідного досвіду, тому тут вище голови стрибнути практично неможливо, щодо англійської то тут дещо краща ситуація і на скільки я знаю якщо рівень трішки не дотягує то можна просто пообіцяти його підтягнути і попрацювати над ним вже на позиції інтерміда. Презентація це в певному сенсі найпростіша частина, для переходу на інтерміда потрібна як мінімум презентація для власної команди. Я вирішив ознайомити команду з ASP MVC 3. На скільки я знаю майже ніхто з тімки окрім мене реального досвіду в даній технології немає тому з однієї сторони зможу подати корисний матеріал а з іншого ймовірність що завалять компетентними питаннями невелика ) .

Що до таблиці з вимогами то вона розділена на три рівні знаннь: початковий, середній та експерт. Для джуніор девелоперів список вимог набагато менший і я додам його в наступному пості, про вимоги для сеньора поки що говорити дуже рано тому зосереджусь на вимогах для інтерміда:

Design – OOD(Обєктно Орієнтований Дизайн)

CL1 (Beginner)

Abstraction

Encapsulation

Inheritance vs. Aggregation

Modularity

Polymorphism

Types vs. Classes

Abstraction Qualities (cohesion, coupling, etc)

CL2 (Competent)

GoF Design Patterns

Architectural Patterns: Layered Architecture

Architectural Patterns: MVC

Architectural Patterns: SOA and EDA

Architectural Patterns: IoC

.Net

CL1 (Beginner)

System types (value, reference, boxing, generic, type forwarding)

Declare classes, interfaces, class members, static and member

Common Exceptions an exception handling

Type conversion

Equality comparison

System collections

Generic collections.

Events and delegates.

Strings and StringBuilder

Configuration files (System.Configuration namespace)

Serializers, serialize/deserialize objects to binary format

Serialization, serialize/deserialize objects to XML format

Files and Folders (System.IO namespace)

Streams (Stream, FileStream, etc.)

TextReader, TextWriter

XML manipulations

CL2 (Competent)

Specialized collections (CollectionsUtils BitVector32, HybridDictionary etc.)

Implement special .NET interfaces (IConvertible, IDisposable, IComparable etc.)

Managing Application domains

Custom serialization

Custom attributes

Garbage collection

Expose COM components to the .NET Framework and .NET Framework components to COM.

SQL

CL1 (Beginner)

DDL for tables, relationships, primary keys, foreign keys

Data Types (character string, binary string, exact numbers, approximate numbers, date and time, boolean, null)

Data manipulation (insert, update, delete)

Retrieving data (simple select statement)

Using of standard SQL functions

Multi-table queries (inner joins, outer joins)

CL2 (Competent)

Creating and modifying database objects (indexes, views)

Using complex criteria (ORDER BY, GROUP BY, HAVING, IN, ... )

SQL operators

Sessions, transactions, locks

Implementing of custom SQL functions

SQL procedural language, stored procedures, triggers

Retrieving data; Combining the results of multiple queries (union, excep, subqueries)

Handling errors in SQL statements

Cursors

Verification - Automated Testing - .Net

CL1 (Beginner)

Unit testing fundamentals and elementary tests

CL2 (Competent)

Organizing and building unit tests (Nunit, VS 2008, mbUnit)

Managing test suites

Working with test data

Running unit tests

Reporting unit results

Mocks/Stubs (Nmock, POCMock, etc.)

Code Coverage Tools (NCover)

Design – Modeling

CL1 (Beginner)

UML: Basic Diagram Types

UML: Use Case Diagram (Essentials)

UML: Class Diagram (Essentials)

Entity Relationship Diagrams

Data Flow Diagrams

Refactoring

CL1 (Beginner)

Refactoring Concept (what/when/why)

Moving Features Between Objects (basic)

Move Method

Move Field

Organizing Data (basic)

Encapsulate Field

Encapsulate Collection

Composing Methods (basic)

Extract Method

Inline Method

Inline Temp

Replace Temp with Query

Split Temporary Variable

Simplifying Conditional Expressions (basic)

Decompose Conditional Expression

Consolidate Conditional Expression

Consolidate Duplicate Conditional Fragments

Remove Control Flag

Replace Conditional with Polymorphism

Concurrency - .Net

CL1 (Beginner)

Understand CLR threading

Using ASync methods

lock keyword or System.Threading.Monitor

Mutual exclusion and condition synchronization problems

Deadlock problem

В даний список я виніс основні як на мене вимоги, але токож до нього входять вимоги по якості коду, англійскій мові, роботі з SVN репозиторієм і кінцевою інтеграцією. Список як бачите досить великий і я по можливості буду додавати цікавий матеріал з яким зустрінусь по мірі підготовки. На даний час я маю реальний досвід у розробці і відповідно в деяких темах мені лише треба навести порядок. В основному підготовка йде за принципом памятаю непамятаю і незнаю. Відповідно відмічаю кожен пункт, після чого переходжу до навчання. Щодня по можливості перечитую ту чи іншу тему роблю невеличкі записи і обговорюю прочитане з іншими девелоперами…

Успіхів у підготовці!