PHP에 대한 "고급"지식을 향상시키는 방법은 무엇입니까? (빨리)
저는 수년 동안 PHP로 작업 해 왔으며 언어를 아주 잘 이해하고 매우 잘 작동하는 고급 시스템과 그다지 발전하지 않은 시스템을 많이 만들었습니다.
내가 겪고있는 문제는 내가 전에 배운 적이없는 무언가에 대한 필요성을 발견했을 때만 배운다는 것입니다. 이로 인해 문제를 처리하는 솔루션 및 기타 코드를 찾게되므로 이전에 보지 못했던 새로운 기능이나 구조에 대해 배울 것입니다. 이런 식으로 더 나은 기술을 많이 배웠습니다 (예 : Amazon, Google 또는 기타 주요 회사에서 제공하는 수업 공부).
이것의 주된 문제는 그것이 존재하는지 모르면 무언가를 배울 수 없다는 개념입니다. 예를 들어, empty()함수 에 대해 배우는 데 몇 달의 프로그래밍이 걸렸고 strlen()빈 값을 확인 하는 데 사용하는 문자열 길이를 간단히 확인했습니다 .
저는 이제 더 크고 더 큰 시스템을 구축하고 있으며, highscalability.com과 같은 블로그를 읽기 시작했고 확장을 위해 MySQL 복제 및 서버 데이터를 연구하고 있습니다. 전체 시스템이 작동하게하려면 코드 구조가 매우 중요하다는 것을 알고 있습니다.
reddit의 구조에 대한 최근 블로그를 읽은 후 표준 또는 "허용되는 시스템"이 있는지 의문을 갖게되었습니다.
나는 프레임 워크를 살펴 보았고 (나는 후회했지만 PHP 프레임 워크가 나에게 적합하지 않다고 결정한 Kohana를 사용했다) 프레임 워크를 갖는 것보다 내 자신의 함수 라이브러리를 선호합니다.
내 현재 구조는 WordPress, Kohana 및 내 지식이 혼합되어 있습니다.
잠재적으로 유익하다고 볼 수있는 방법은 다음과 같습니다.
- 블로그 읽기
- 튜토리얼 읽기
- 다른 사람과 협력
- 책을 읽다
아주 좋은 시스템 개발자가되는 수준을 "다음 단계로"올리는 가장 좋은 방법은 무엇입니까?
PHP 프로그래머가 되고자하는 모든 사람은 항상 첫 번째 단어 만 사용하고 두 번째 단어는 완전히 무시합니다.
"프로그래밍"이 "PHP"보다 훨씬 더 중요하지만 PHP 전문가가 되려면 우선 프로그래머가되어야합니다.
그래서 나는 마지막 책인 책 읽기에 투표 할 것입니다. PHP가 아니라 일반적인 프로그래밍입니다. Grady Booch 's, Martin Fowler 's, 심지어는 Donald Knuth 's도 있습니다.
Java 또는 Python과 같은 다른 언어를 살펴 보는 것도 좋을 것입니다. 그들로 전환하는 것이 아니라 그들로부터 배우기 위해서입니다.
프레임 워크보다는 내 자신의 함수 라이브러리를 선호합니다.
'함수 라이브러리'와 '프레임 워크'를 별개의 개념 (좋습니다!)으로 언급합니다. 그러니 조금만 시도해보고 함수 라이브러리를 프레임 워크로 바꾸는 것은 어떨까요? 이것은 배우는 좋은 방법이지만 시장성있는 기술을 가질 수있는 가장 좋은 방법은 아닙니다.)
그것은 또한 잘못된 것을 배우는 좋은 방법 이므로 시작하기 전에 조사를해야합니다.
"필수"기능
거의 모든 프레임 워크에있는 특정 기능이 있으며 그 이유가 있습니다. 그들을 조사하십시오; 그들이 존재 하는 이유 와 그들의 변형이 무엇인지 알아보십시오. 프레임 워크에 포함 할 구현을 선택합니다.
- 객체 지향 (함수 라이브러리를 사용하는 것이 아니라 프레임 워크를 작성하는 이유)
- 패턴 사용 ( 프론트 컨트롤러가 아닌 많은 프레임 워크가 애플리케이션 컨트롤러 를 사용하는 이유를 확인하고 스스로 물어보십시오. 페이지 컨트롤러 를 사용하는 플랫폼이 있습니까?
- 기본 MVC 구조
- 깨끗한 URL
이해하고 에뮬레이션하려는 비 PHP 플랫폼의 기능
- 루비를 좋아한다면
include클래스의 모듈에 대한 수단을 원할 것입니다 . - Asp.NET이 마음에 든다면 PHP 환경에서 서버 컨트롤 을 만들어보고 싶 습니까?
- 용서가 HTML 의 기본값 이라는 것을 화나게 합니까? 출력 서버 측의 유효성을 검사하지 않는 이유
나는 당신이 관심을 갖는 것이 무엇인지 모르기 때문에 거기서 멈추겠습니다.
게시하세요!
Nathan이 옳기 때문에이 부분은 중요합니다 . 당신의 작업은 다른 사람들이보고, 도전하고, 비판하고, 수정해야합니다. 램프를 부셸 아래에 두지 마십시오. 볼 필요가 있습니다. 구글 코드 나 소스 포지 등에 올려 놓고 사람들이 진지하게 쳐다 보려고한다면 진지하게 받아 들여야합니다. 단위 테스트와 회귀 테스트를 유지해야합니다. 버전 제어를 사용해야합니다. /* header comment */각 파일의 상단에 큰 주석과 각 클래스와 그 구성원에 대한 유용한 문서 생성 주석으로 잘 주석 처리해야합니다 .
요약
이 모든 작업을 수행하면 다른 플랫폼에 대해 (높은 수준에서) 배울 수 있습니다. PHP 개발자로서 확실히 "딩 40"을 할 수 있습니다. 단위 테스트에 대해 배울 수 있습니다. 회귀 테스트에 대해. 효과적인 문서화에 대해 배울 수 있습니다.
프레임 워크가 "특이하고 아마도 짜증나게"나올 것이라는 것을 보장하지만, 그것을 작성함으로써 많은 것을 배울 수 있습니다. 프레임 워크는 제품이 아니라는 점을 명심하십시오. 여정이야 ... 일종의.
- PHP 및 PHP의 사전 정의 된 인터페이스의 숨겨진 기능 살펴보기
- 다른 언어를 배우십시오. PHP보다 학습 곡선이 더 가파른 언어를 배우십시오. PHP에 비해 다른 언어의 장점을 지적 할 때마다 저는 PHP 배싱 혐의를받습니다. 대부분은 다른 고급 언어를 전혀 마스터하지 않은 사람들입니다. 하지만 위험을 감수 할게요. Ruby, Python, Pearl 및 haXe (엄격한 유형의 대응 물)를 제안합니다. 일단 해본 후에는 새로운 지식을 PHP에 적용 해보십시오. 또는 돌아가고 싶지 않은 경우 PHP에서 멀리 이동하십시오 (내 생각에 일어날 가능성이 거의 없다고 생각합니다).
- 크리 티즘에 대처하는 법을 배우십시오. Nathan의 게시물에 대한 귀하의 반응은 아직 처리 할 수 없음을 분명히 보여주었습니다. 그는 절대적으로 옳습니다.
- 지금 제 첫 번째 PHP 프레임 워크를 보면 꽤 엉망이라고 말해야합니다. 그 당시 저는 그것이 훌륭하다고 생각했습니다 (그리고 이미 배포 된 많은 프로덕션 코드보다 여전히 낫습니다). 그럼에도 불구하고 많은 결함이있었습니다. 당신이 완전히 천재가 아니라면, 당신이 몇 년 후 (당신이 진화한다고 가정 할 때) 그들을 되돌아 보면 당신의 첫 프레임 워크는 끔찍하게 보일 것입니다.
- 실제로 만들 프레임 워크는 시간이 지남에 따라 더 나빠질 것입니다 (진화를 멈추지 않는다고 가정). 이러한 이유로 사용 가능한 프레임 워크를 사용하고 애플리케이션 개발에 더 집중할 수 있습니다. 사용하는 프레임 워크에 제한이있는 경우 다른 PHP 프레임 워크를 작성하는 것보다 기여하는 것이 좋습니다.
- 자신 만의 프레임 워크 작성 (재미 / 학습용이 아니라 프로덕션 배포 용)을 선택하는 시점은 요구 사항이 다른 프레임 워크가 제공하는 프레임 워크를 능가 할 때이며 작업하는 아이디어가 마음에 들지 않을 때입니다. 제가 직접 한 일반적인 실수입니다. 그러나 이제 나는 그것을 배웠다고 말할 수 있습니다. 하지만 조언을 구하면 (불행히도 당시에하지 않았던) 이러한 답변을 얻을 수 있습니다.
- 직접 작성하지 않은 코드로 작업하여 많은 것을 배웁니다. 당신은 다른 사람들이 많이 생각한 프레임 워크에 의해 촉진 된 개념을 습득 할뿐만 아니라 생산적이고 유연하며 팀에서 일하고 일을 완수 할 수있는 법을 배웁니다 (합리적으로 좋은 결과를 얻는 동안).
- 여러분이 PHP 오픈 소스 프로젝트의 모든 팀보다 낫다고 생각할 수 없다고 생각합니다. 젊은 개발자가 가진 바퀴를 재발 명하고 아직 아무도 다루지 않은 문제를 해결하기 위해 성장해야하는 완고한 본능적 인 욕구를 극복하십시오.
- 구성 요소 라이브러리와 프레임 워크의 차이점을 알아보십시오. 프레임 워크를 "자신의 함수 라이브러리"로 대체 할 수 있다고 생각하기 때문에 프레임 워크의 요점이 무엇인지 이해하지 못했을 것입니다. 종속성 반전 , 제어 반전 및 종속성 주입을 살펴보십시오 .
- 소프트웨어 설계에 대해 알아보십시오. SOLID 및 GRASP 와 같은 OO 원칙을 살펴보십시오 .
- 다른 패러다임을 시도하십시오. AOP, 함수형 프로그래밍. Ruby, Objective-C 또는 Smalltalk와 같이 더 강력한 객체 지향 언어를 사용하여 OO 기술을 향상시킵니다.
- Flow3, Symfony, PHP igniter 및 CakePHP와 같은 PHP 프레임 워크를 살펴보십시오. 나는 당신이 그렇게해야한다고 생각하는 이유를 이미 지적했습니다.
- 내 다른 의견에서 지적했듯이 RDBM 이외의 다른 저장소를 고려해야합니다. SQL과 OOP는 실제로 잘 어울리지 않습니다. OODBMS, 다양한 데이터베이스 추상화 계층, 키-값 저장소, CouchDB 및 MongoDB와 같은 문서 저장소를 살펴보고 캐싱 서버를 memcache 등으로 배포합니다.
다음은 몇 가지 생각입니다.
다른 것을 시도하십시오. 새로운 언어를 배우십시오. 다른 언어를 배우는 과정에서 실제로 두 언어 모두에서 더 나은 결과를 얻을 수 있습니다.
오픈 소스 프로젝트에 기여하세요.
High scalability and PHP/MySQL are not friends . There are technologies today that are build just for that. node.js and Redis to name a couple.Answer questions in SO. Other people's problems can make you think outside the box and you improve on the process of trying to help, and you also do something nice to someone.
[ will try to add here if I think of anything else I just woke up drinking coffee :D ]
Learn to do what you already know ... in a different way. Examples:
- in a different language
- on a different platform
- in parallel/distributed
- through a framework (yes, you decided that they "aren't for you" - maybe try a different one, they are sometimes very different from each other)
Maybe you should look into frameworks again, I would suggest having a look at the Zend Framework, because it's more like a library of components you can use as you see fit, and doesn't really impose a rigid structure you have to follow (like some other frameworks do), though it does suggest a (quite sane imho) project layout. A good starting point would be Surviving the deep end.
Things you haven't mentioned yet, and that could prove useful to know (especially in larger projects) :
- OOP with PHP (design patterns)
- Unit testing (PHPUnit, SimpleTest, ...)
- ORM (Propel, Doctrine)
Simple: do it. Needs will make you learn. Find a way to get involved in increasingly advanced projects, be it commercial or open source. There is no other way you can really learn something.
I would join discussion boards and try to solve other peoples problems. Sometimes there are quite challenging questions that force you to do some research. If you can't answer it, you can wait for someone who can and learn something then.
As for frameworks, learn from them. I roll my own too, since most of the frameworks out there can be rather slow. Although fast enough for most of the websites out there.
I would also recommend looking at Facebook's PHP library. They do some interesting stuff in there.
The best you can do is to buy a book on efficient algorithms. In every computer science student's life there comes a time he/she has to study those. The problems that are discussed/solved there are abstractions of almost any real world problem you may ever face.
Besides that reading blogs about how others did it is perfectly fine as it helps you to understand how to practically use (and maybe even implement) the principles of efficient algorithms.
Regards.
Not enough can be said about working with other developers. I know 3 developers especially, 2 that I work with on a day to day basis, who blow me away with their knowledge. I ask their opinions on everything I do, not because I second guess my own ideas, but more that I want to hear other ideas, especially from people who I respect as developers. I learn more from these people than any other means. If you have no access to other senior developers, then definitely post on SO or other dev forums and ask peoples opinions, ask people how they would approach a specific project/issue. You wont learn new techniques / methods / functions generally unless you see them being used (how do you know what to look for if you don't know it exists?)
Also, as already stated, take part in an OS app. Go to sourceforge and find a project needing a developer. Or download an app and try to write a plugin for it (I am writing a plugin for Invision 3.0 atm and learning a few things.)
Hope that helps.
Read other people's code. You have your own library now, yet you might get some enlightenment when reading the source of other applications. Then ask yourself the 'why's. Be the blog writer, instead of the reader. Also, emphasize more on the programmer than the language. Rather look at solutions that already solve a problem and try to replicate them with your own knowledge. Good luck and have a lot of fun!
The approach to look at at other programmers code is definitely a good way to learn "good" or "bad" practices. After reading other code you develop a "feeling" for good code.
I definitely recommend Frameworks like Zend Framework, symfony, CakePHP or Agavi because a lot of contributors look at that code and develop them constantly towards the "ideal" solution (which of course will never be reached...) ;) You still can make the decision developing your own classes instead the ones the framework offers...
With such a long PHP background you could consider contributing to an open source framework. Discussions with other developers bring you forward in a faster way.
Showing your code to others and ask for constructive feedback has the same effect. You never know how good you are until you benchmark your skills with others. Always in a constructive manner. This would be a natural process when contributing to an open source framework. ;)
You should work with examples, work with them when you expand them so you will learn how to expand examples by making them more functional and give out more features.
Although, it is good to create something that you've learned so far in PHP. To practise more, you should create something like, a booking system, etc. Sooner or later you will be able to expand more by learning more when you study more in PHP which will lead your development to be much more better.
You could ask your company if they could pay you a Zend PHP certification exam. Studying for this exam would oblige you to know PHP well and to train by reading a lot of the documentation, the Zend study guide, and also by training with mock exams. It's a very efficient way of improving, and it looks quite good on a résumé.
"my own library of functions" == "a [idiosyncratic and probably sucky] framework".
I recommend learning Symfony because the developers seem to consistently strive to do everything according to "best" practices ... but you could probably learn a lot from any of the popular frameworks.
Don't write your own framework. Please.
'IT TIP' 카테고리의 다른 글
| 온라인 Internet Explorer 시뮬레이터 (0) | 2020.10.21 |
|---|---|
| stdout에서 스프링 부트 로고를 비활성화하는 방법은 무엇입니까? (0) | 2020.10.20 |
| HQL 또는 Java Persistence Query Language의 IN 절 (0) | 2020.10.20 |
| Express.js 라우팅 : 선택적 slpat 매개 변수? (0) | 2020.10.20 |
| GitHub SSH 키의 암호를 재설정하거나 변경하는 방법은 무엇입니까? (0) | 2020.10.20 |