Fullstack web developer (Frontend: AngularJS, server: PHP), consultant
"Good code solves only existing issues, without extra universality, doesn't contain anti-patterns and covered by tests to be able to evolve". (c) me
Full-stack programmer with 10+ years experience: I use AngularJS since 2011, use PHP since 2004. I like to write clean OOP code with unit-tests. I can consult startups about best practices, widely used services and technologies (sometimes it will help you to save time and money).
upWork All Stars Gold Club member - "Top Rated" now :)
Things I'd like to get more experience with: Firebase, Dart, Rust, Go, Famous, RethinkDB, websockets, Polymer, HTML5 Media (audio, video, canvas).
Things I don't want to work with: CoffeeScript.
Very passionate to work with AngularJS. I can write directives (components) of any level of complexity - including interactive maps (Angular+D3.js), nested trees, SVG elements and other fancy things. My components are always reusable. I write e2e and unit tests with Protractor and Jasmine (with Karma as tests runner). Prefer to write ES6 (with BabelJS) nowadays. I have a lot of experience with Ionic, created few mobile apps with this framework, including WMS system (as set of mobile/hybrid apps). I follow best practices and my own years of experience to design apps architecture clean, scalable, easy for collaboration and code reuse.
I like MVC and REST paradigms, have experience in writing REST API (also with OPTIONS method support and auto-generated Markdown documentation). Have experience with PayPal API, Amazon S3, Cloudflare, Mandrill, Nexmo and others.
Have a lot of experience with caching (also with mutexes, semaphores, preventing dog-pile and race condition effects, RAII control of resources). I wrote an PHP-wrapper for Redis, published on redis.io and successfully working with high load, getting thankful feedback from programmers who use it. Like to optimize performance of algorithms and applications.
I think tests are essential for code evolution. There is no code without need to evolution. TDD helps to build modular and easy maintainable system, helps to design whole system to be more scalable and testable. Amount of time needed to write tests is always less than amount of time that will be spent to debug without tests.
Time of developer's work costs more than server's resources, but application should be designed with performance in mind - each module should be replaceable and should not decrease overall performance. Web page must be generated fast, should have minimum full page reloads - all for user's comfort.
My favorite books are 'Clean code', 'Patterns of Enterprise Application Architecture' and 'PHP Objects, Patterns, and Practice' . Also, I like ideas of Misko Hevery about writing testable code.
I like and respect SOLID principles, hexagonal architecture, MVC pattern, and, especially, Separation of concerns.