Ok, so this is what i got, this may help other people :
Hardware side
==========
1- any controller that contain SPI module to be able to connect to the Ethernet controller (ENC28j60 in this case).
2- level shifter (LS), because the ENC28j60 needs and works on 3.3V and the controller i chose works on 5V. The ENC28J60 input is 5v tolerant, meaning it can connect to the microcontroller output without a LS, but the microcontroller input needs a voltage about 5v to be able to recognize the logic levels (1,0) and that's why there are a LS between the ENC28J60's output & the controller's input.
3- voltage regulator, this one is easy just read about it.
4- RJ45 jack with Ethernet transformer (sometime Ethernet transformer is called magnetics or magjack) .
5- A 25 MHz Crystal oscillator is necessary for the ENC28J60 to work (providing clock Pulses) and another one with 20Mhz for the controller (if you didn't use the internal oscillator of the microcontroller) .
6- other components, like different values resistors, capacitors, LEDs, Relays, transistors, diodes, LCD screens ... etc .. Depending on what you need.
Software side
==========
There are several approachs to be able to write the microcontroller's firmware, and every one of it have it's advantages and disadvantages. You can choose what's suitable for you depending on different factors, including, your programming skills, available time, the type of your application or device.
1- MicroC , mikroBasic, mikroPascal, they contain libraries written in a HLL (High Level Language) to make easier for you.
Check This
2- Assembly language : This is a LLL (Low Level Language) .. Every microcontroller has a different number of Assembly instructions depending on it's internal structure and complexity. to understand and use Assembly language for a particular controller, you need to know it's internal structure like register names and functions, ADC's (Analog digital converters) and it's memory locations. That's why it's harder than other programs written in a HLL like C, Basic .. etc.
3- There are other fields you may need (Depending on your goal) .. For example, knowing something about these stuff will certainly helps if you're trying to control things over the internet :
1-Networks : Such as network protocols ( IP, TCP, IMCP, UDP, DNS ... etc) and network devices ( Hubs, Switches, Routers, Modems, Cables types .. etc).
2- Web languages : For instance, HTML( This one is so easy and you can learn it in a very short time), HTTP is essential to learn but learning Java script is useful too.
SO, Determine what you need, choose you microcontroller based on that, and learn about it.
Hope this will help as a BASIC guideline on how to start .. Good luck